nodejs学习笔记二——链接mongodb

a.安装mongoose库用来链接mongodb数据库  

  安装mongodb数据库参考mongodb安装

  前言(怨言)

  本来是想安装mongodb库来链接mongodb的,命令行到nodejs工程目录:npm install mongodb --save

  

  但是发现报gyp ERR! stack Error:Can't find python executable "python"错误,缺少python运行环境。

  我晕死,我链接mongodb还需要Python,这不是存心让用户找虐。查到有个网友说相同的库还有mongoose, mongoskin,他们都比mongodb更有好用。果断放弃mongodb,使用mongoos。

  使用命令:npm install mongoose --save

  

  一下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基础

 

  如果觉得本文不错,请点击右下方【推荐】!

 

 

  

  

  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
Node.js是一个基于Chrome V8 JavaScript引擎的JavaScript运行环境,可用于服务器端编程。Express是一个基于Node.js平台的Web应用开发框架,提供了简单易用的API,可以快速构建Web应用程序。Mongoose是一个优秀的Node.js模块,用于连接MongoDB数据库,并提供了丰富的API来操作MongoDB数据库。 下面是使用Node.js、Express、Mongoose操作MongoDB的基本流程: 1. 安装Node.js、Express和Mongoose 在终端中执行以下命令: ``` npm install node npm install express npm install mongoose ``` 2. 连接MongoDB数据库 在app.js或server.js文件中,使用Mongoose连接MongoDB数据库: ``` var mongoose = require('mongoose'); mongoose.connect('mongodb://localhost/test'); ``` 3. 定义数据模型 在models目录下创建一个JavaScript文件,使用Mongoose定义数据模型: ``` var mongoose = require('mongoose'); var Schema = mongoose.Schema; var UserSchema = new Schema({ name: String, age: Number, email: String }); module.exports = mongoose.model('User', UserSchema); ``` 4. 实现API接口 在routes目录下创建一个JavaScript文件,实现API接口: ``` var express = require('express'); var router = express.Router(); var User = require('../models/user'); router.get('/users', function(req, res, next) { User.find(function(err, users) { if (err) return next(err); res.json(users); }); }); router.post('/users', function(req, res, next) { var user = new User(req.body); user.save(function(err) { if (err) return next(err); res.json(user); }); }); router.get('/users/:id', function(req, res, next) { User.findById(req.params.id, function(err, user) { if (err) return next(err); res.json(user); }); }); router.put('/users/:id', function(req, res, next) { User.findByIdAndUpdate(req.params.id, req.body, function(err, user) { if (err) return next(err); res.json(user); }); }); router.delete('/users/:id', function(req, res, next) { User.findByIdAndRemove(req.params.id, function(err, user) { if (err) return next(err); res.json(user); }); }); module.exports = router; ``` 5. 启动Express应用 在app.js或server.js文件中启动Express应用: ``` var express = require('express'); var app = express(); var bodyParser = require('body-parser'); var userRoute = require('./routes/user'); app.use(bodyParser.json()); app.use('/api', userRoute); app.listen(3000, function() { console.log('Server listening on port 3000'); }); ``` 6. 测试API接口 通过Postman等工具测试API接口。例如: - GET http://localhost:3000/api/users - POST http://localhost:3000/api/users - GET http://localhost:3000/api/users/5f3e7003c3e1c12345678901 - PUT http://localhost:3000/api/users/5f3e7003c3e1c12345678901 - DELETE http://localhost:3000/api/users/5f3e7003c3e1c12345678901 这样就完成了使用Node.js、Express、Mongoose操作MongoDB的基本流程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值