设为首页 收藏本站
查看: 1259|回复: 0

[经验分享] nodejs学习笔记二——链接mongodb

[复制链接]

尚未签到

发表于 2017-2-24 10:09:26 | 显示全部楼层 |阅读模式
a.安装mongoose库用来链接mongodb数据库  

    安装mongodb数据库参考mongodb安装
    前言(怨言)
    本来是想安装mongodb库来链接mongodb的,命令行到nodejs工程目录:npm install mongodb --save
     DSC0000.png
    但是发现报gyp ERR! stack Error:Can't find python executable "python"错误,缺少python运行环境。
    我晕死,我链接mongodb还需要Python,这不是存心让用户找虐。查到有个网友说相同的库还有mongoose, mongoskin,他们都比mongodb更有好用。果断放弃mongodb,使用mongoos。
    使用命令:npm install mongoose --save
     DSC0001.png
    一下ok了。

b.mongoose的使用

    首先我们要知道mongoose建立数据库有点类似普通的关系数据先定义结构,然后填写字段,不想普通的noSql数据库操作。所以这里有一些概念需要明白


  •   Schema : 一种以文件形式存储的数据库模型骨架,不具备数据库的操作能力

  •   Model : 由Schema发布生成的模型,具有抽象属性和行为的数据库操作对

  •   Entity : 由Model创建的实体,他的操作也会影响数据库

    在使用mongoose构建和操作数据库时,先定义数据库每条数据(普通关系数据库中的一行)的结构,也就是Schema,然后由Schema生成一个model。这个model拥有操纵由Schema结构构成的的整个表格中的数据的能力(包括增删改查等)。可以由model创建一个个的实体数据,每个实体数据结构和Schema定义的结构相同。
    下面直接上实例



//记账本
var pocketBookSchema = new mongoose.Schema({
name: String,   //定义一个属性name,类型为String
brand: String,    //品牌
unitPrice: Number, //单价
quantity: Number, //数量
allPrice: Number, //总价
picture: String, //照片路径
date: String, //日期"2016-01-01"
_saveData: Date, //保存数据的日期
remark: String //备注
});
var pocketBookModel = db.model('pocketBook',pocketBookSchema);
//如果该Model已经发布,则可以直接通过名字索引到,如下:
//var pocketBookModel = db.model('pocketBook');
var info ={
name: req.body.name,
brand: req.body.brand,
unitPrice: req.body.unitPrice,
quantity: req.body.quantity,
allPrice: req.body.allPrice,
picture: req.body.picture,
date: req.body.date,
remark: req.body.remark,
_saveData: new Date()
}
//创建一个实例
pocketBookEntity = new pocketBookModel(info);
//保存数据库
pocketBookEntity.save(function(err) {
if (err) {
console.log('记账本添加一条数据失败');
return;
}
console.log('记账本添加了一条数据');
});
  上面就是使用mongoose添加一条数据的例子,当然,真实的项目中还需要连接mongodb数据库,然后增删改查都是通过url请求来处理的。本人这里举一个完整的例子。
  我的nodejs主程序是server.js,在同一级目录下我新建了一个initdb.js用来链接数据库和初始化所有需要用到的Schema和相应的model(这里只用了一个).
  initdb.js源码如下



var mongoose = require('mongoose');    //引用mongoose模块
var db = mongoose.createConnection('192.168.0.174','chuayyqing');
db.on('error',console.error.bind(console,'连接错误:'));
//记账本
var pocketBookSchema = new mongoose.Schema({
name: String,   //定义一个属性name,类型为String
brand: String,    //品牌
unitPrice: Number, //单价
quantity: Number, //数量
allPrice: Number, //总价
picture: String, //照片路径
date: String, //日期"2016-01-01"
_saveData: Date, //保存数据的日期
remark: String //备注
});
var pocketBookModel = db.model('pocketBook',pocketBookSchema);
//如果该Model已经发布,则可以直接通过名字索引到,如下:
//var pocketBookModel = db.model('pocketBook');

exports.pocketBookModel = pocketBookModel;
  server.js如下



var express = require("express");
var app = express();
var bodyParser = require('body-parser');
// 创建 application/x-www-form-urlencoded 编码解析
var urlencodedParser = bodyParser.urlencoded({ extended: false })
var models = require("./initdb");
//指定静态文件路劲static,可以直接访问static下的文件test.png:http://localhost:8080/test.png
app.use(express.static('chuayyqing/static'));
//查询记账本列表
app.get("/pocketBook-list",function(req,res){
models.pocketBookModel.find(function(err,pockets){
res.send(pockets);
})
})
//往记账本添加一条记录
app.post("/pocketBook-addOrUpdateOne",urlencodedParser,function(req,res){
/*info = {
name: req.body.name,
brand: req.body.brand,
unitPrice: req.body.unitPrice,
quantity: req.body.quantity,
allPrice: req.body.allPrice,
picture: req.body.picture,
date: req.body.date,
remark: req.body.remark,
_saveData: new Date();
}*/
var info = req.body;
info._saveData = new Date();
console.log(info)
//有_id表示是更改一条数据
if(info._id){
var query = { _id: req.body._id };
models.pocketBookModel.findOneAndUpdate(query,info,function(err){
if (err) {
console.log('记账本修改一条数据失败');
res.send({code:500});
return
}
console.log('记账本修改了一条数据');
res.send({code:200});
});
//否则是新增一条数据
}else{
//如果没有发布,上一段代码将会异常
var pocketBookEntity = new models.pocketBookModel(info);
//保存数据库
pocketBookEntity.save(function(err) {
if (err) {
console.log('记账本添加一条数据失败');
res.send({code:500});
return;
}
console.log('记账本添加了一条数据');
res.send({code:200});
});
}   
})
//删除记账本的一条记录
app.post("/pocketBook-deleteOne",urlencodedParser,function(req,res){
models.pocketBookModel.remove({_id: req.body.id},function(err){
if (err) {
console.log('记账本删除数据失败');
res.send({code:500});
return;
}
console.log('记账本删除了一条数据');
res.send({code:200});
})
})

var server = app.listen(8080,function(){
var host = server.address().address;
var port = server.address().port;
console.log("应用实例,访问地址为 http://%s:%s", host, port)
})
  增删改查数操作上面就都有了。只要弄几个简单的网页就可以把server.js跑起来了。
  里面express的用法可以参考菜鸟教程expres基础
    如果觉得本文不错,请点击右下方【推荐】!
    

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-346493-1-1.html 上篇帖子: nodejs中如何使用mysql数据库[node-mysql翻译] 下篇帖子: windows 中配置 nodejs npm
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表