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 模拟请求:
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))
})