美文网首页
#3 mongoose 基本使用

#3 mongoose 基本使用

作者: JamesSawyer | 来源:发表于2017-06-19 23:11 被阅读73次

mongoose连接mongodb

创建Schema和model

var mongoose = require('mongoose');

var Schema = mongoose.Schema;

var BookSchema = new Schema({
    title: String,
    author: String,
    year: Number
});

//mongoose.model 创建一个 Schema 的实例
module.exports = mongoose.model('Book', BookSchema);

连接到MongoDB

var connection = mongoose.connection;

# 这个是数据库地址
var db = 'mongodb://james:123456@localhost:27017/example';

// 连接
mongose.connect(db);

// 连接后的事件 这里主要用来表示是否成功连接到数据库
connection.on('connected', function() {
  console.log('Mongoose 连接到 example数据库');
}) 
connection.once('open', function(callback){
    console.log('数据库启动了');
    // app.listen(8080, () => console.log('Express server listening on port 8080'));
})

实例操作

数据库的操作通常就是 create | remove | update | delete, 也就是常说的 '增删改查'。

1.创建数据模型

// Book.model.js
var mongoose = require('mongoose')
var Schema = mongoose.Schema

// Schema相当于数据骨架
var BookSchema = new Schema({
    title: {
      type: String,
      required: true
    },
    author: String,
    category: String
    //publishDate: {
    //  type: Date,
    //  default: Date.now
    //} 
});

// mongoose.model 表示实例化Schema
module.exports = mongoose.model('Book', BookSchema);

关于 schema的类型定义, mongoose doc

2.操作数据

使用 'express','body-parser'

// app.js
var express = require('express');
var app = express();
var bodyParser = require('body-parser'); // 获取URL中的参数
var mongoose = require('mongoose');
var Book = require('./Book.model');


app.use(bodyParser.json()); // 用来解析json数据格式
// extended 布尔值的含义
// true: 表示使用 'querystring' 库来解析 url-encoded 数据
// false: 表示使用 'qs' 库来解析
app.use(bodyParser.urlencoded({
    extended: true
}));

// example 为 数据库名
var db_url = 'mongodb://james:123456@localhost:27017/example';

// 连接mongodb
mongoose.connect(db_url);

mongoose.connection.on('connected', function() {
    console.log('Mongoose connection  open to example');
})
mongoose.connection.on('error', function(err) {
    console.log('Mongoose connection error ' + err);
})
mongoose.connection.once('open', function(callback){
    console.log('数据库启动了');
    // app.listen(8080, () => console.log('Express server listening on port 8080'));
})

var port = 8080;

app.get('/', function(req, res) {
    res.send('hello');
})

// get请求 查询数据 find()
app.get('/books', function(req, res) {
    console.log('getting all books');
    Book.find({})
        .exec(function(err, books) {
            if (err) {
                console.log('err',err);
                res.send('error has occured');
            } else {
                res.json(books);
                console.log(books);
            }
        })
})

// get请求 查询数据 findOne()
app.get('/books/:id', function(req, res) {
    console.log('get one book');
    Book.findOne({  // 查询单个
        _id: req.params.id
    })
    .exec(function(err, book) {
        console.log('get one book');
        if (err) {
            res.send(err);
        } else {
            res.json(book);
            console.log('get book')
        }
    })
})

// post请求 新增一条数据 save
// 此处使用表单的形式,(使用 'x-www-form-urlencoded')将参数添加到url中
// 然后使用postman 模拟表单提交
app.post('/book', function(req, res) {
    // 实例化一个文档对象
    var newBook = new Book();
    // 使用bodyParser对url参数进行解析
    newBook.title = 'req.body.title';
    newBook.author = req.body.author;
    newBook.category = req.body.category;

    newBook.save(function(err, book) {
        if (err) {
            res.send(err);
        } else {
            console.log(book);
            res.send(book);
        }
    });
});

// 'put'请求 修改数据 findByIdAndUpdate
app.put('/book/:id', function(req, res) {
    Book.findByIdAndUpdate(req.params.id, 
        {$set: { title: req.body.title }},
        {new: true},
        function(err, book) {
            if (err) {
                res.send(err);
            } else {
                res.send(book);
            }
        }
    )
});

// 'delete'请求 删除数据 findOneAndRemove
app.delete('/book/:id', function(req, res) {
    Book.findOneAndRemove({
        _id: req.params.id,
    }, function(err, book) {
        if (err) {
            console.log(err);
            res.send(err);
        } else {
            console.log(book);
            res.send(book);
        }
    })
})


app.listen(port, function() {
    console.log('app listening on port ' + port);
})

mongoose对数据库的操作函数和MongoDB类似,这个查看官方文档即可。

另外postman 模拟请求:

postman模拟post请求.png

mongoose 使用 promise

因为mongoose内置的promise库已经是废弃状态,我们可以使用 bluebird 等promise库让mongoose支持promise

// 安装bluebird步骤已省略
// 使mongoose支持promise写法
mongoose.Promise = require('bluebird');

// 然后可以使用promise风格书写代码
// get请求 查询数据 findOne()
app.get('/books/:id', function(req, res) {
    console.log('get one book');
    Book.findOne({  // 查询单个
        _id: req.params.id
    })
    .exec(function(err, book) {
        console.log('get one book');
        if (err) {
            res.send(err);
        } else {
            res.json(book);
            console.log('get book')
        }
    })
})

// 可以改写为
// get请求 查询数据 findOne()
app.get('/books/:id', function(req, res) {
    console.log('get one book');
    Book.findOne({  // 查询单个
        _id: req.params.id
    })
    .exec()
    then(function(book) {
        res.json(book)
    })
    .catch(err => res.send(err))
})

扩展阅读

  1. body-parser的用法

相关文章

  • #3 mongoose 基本使用

    mongoose连接mongodb 创建Schema和model 连接到MongoDB 实例操作 数据库的操作通常...

  • Mongoose

    Mongoose中文网 1、需求分析 Mongoose是什么? Mongoose优势! 2、基本操作 3. 增删改...

  • mongoose基本使用

    package.js详解 参考 mongoose基本使用 安装 连接 定义模型 新增 查询 修改 删除 [更多其它...

  • mongoose基本使用

    Mongoose 是一个将JavaScript对象与数据库产生关系的一个框架,object related mod...

  • mongoose再认识(二)

    在开发中,除了使用mongoose进行一些基本的操作外,就是一些技巧的使用。 文章接续mongoose再认识(一)...

  • mongoose 使用

    mongoose 使用 Mongoose 基础使用 Connect 链接数据库 定义文档模型, Schema 和 ...

  • nodejs初体验,使用node写一个简易邮箱验证注册登录

    开门进山 前置基础 根据官方手册,会使用插件nodemail,mongoose。(本文使用了mongoose,用来...

  • Mongoose-使用node.js操作数据库

    Mongoose就是对象文档模型(ODM) 1.Mongoose的对象 Mongoose有3个对象:Schema(...

  • mongodb

    指令 指令 使用mongoose

  • mongoose 操作MongoDB

    操作mongoDB 操作mongoDB 借助一个插件 mongoose mongoose 安装 使用mongoos...

网友评论

      本文标题:#3 mongoose 基本使用

      本文链接:https://www.haomeiwen.com/subject/vjswqxtx.html