上一节中我们实现了一个基本的Node应用,它可以接受HTTP请求并返回静态的JSON。在这一节中,将对我们的宠物数据增加CRUD操作。我们要学习如何连接MongoDB,使用Mongoose进行对象建模,实现GET,PUT,POST和DELETE接口。
连接MongoDB
如果你还没有安装MongoDB,请登录Mongo官网下载。
我们需要执行三步来连接MongoDB:
- 安装Mongoose包
- 加载Mongoose包
- 使用Mongoose.connect连接petpot MongoDB
server.js
中添加页面的内容:
// Load required packages
var express = require('express');
var mongoose = require('mongoose');
// Connect to the beerlocker MongoDB
mongoose.connect('mongodb://localhost:27017/beerlocker');
创建第一个模型-PET
在models
文件夹中创建pet.js
。
打开pet.js
增加下面的内容:
// 引入mongoose库
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
// 定义pet模式
var petSchema = new Schema({
name: { type: String, required: true },
type: { type: String, required: true },
userId: { type: String, required: true },
quantity: Number
});
// 导出pet模型
module.exports = mongoose.model('pet', petSchema);
- 首先,我们引入mongoose包
- 创建一个映射到MongoDB集合的Mongoose模式,并定义该集合中文档的格式
- 模式中包括3个字符串和1个数字,其中3个字符串为必填项
- 导出mongoose pet模型用于接下来的应用中
创建第一个控制器-PET
在controller
文件夹中创建pet.js
打开controller/pet.js
,首先引入刚才我们创建的pet模型
var Pet = require('../models/pet');
现在为我们的宠物园添加宠物
接着在controller/pet.js
中添加页面的内容:
var Pet = require('../models/pet');
var postPets = function(req, res) {
// 创建Pet模型的一个实例
var pet = new Pet();
// 使用Post数据设置这个实例的属性
pet.name = req.body.name;
pet.type = req.body.type;
pet.quantity = req.body.quantity;
pet.userId = req.body.userId;
// 保存实例并检查错误
pet.save(function(err) {
if (err) {
res.json({ message: 'error', data: err });
return;
}
res.json({ message: 'done', data: pet });
});
};
// 导出方法
module.exports = {
postPets: postPets
}
- 首先引入pet模型
- 创建一个函数
postPets
,在函数中创建pet模型的实例,使用post的数据来设置这个实例的属性并保存 - 导出函数,方便接下来应用中使用
准备接收 POST或PUT的数据
安装中间件body-parser
用于接收 POST或PUT的数据
npm install body-parser --save
更新Server.js
增加body-parser
中间页
// Load required packages
var express = require('express');
var mongoose = require('mongoose');
var bodyParser = require('body-parser');
// Create our Express application
var app = express();
// Use the body-parser package in our application
app.use(bodyParser.urlencoded({
extended: true
}));
导入控制器pet
var petController = require('./controller/pet');
增加一个前缀为pet的新路由,为post请求创建接口
router.route('/pets').post(petController.postPets);
使用Postman测试
获取所有宠物
打开controller/pet.js
增加获取所有宠物的接口
var getPets = function(req, res) {
Pet.find(function(err, pets) {
if (err) {
res.json({ message: 'error', data: err });
return;
}
res.json({ message: 'done', data: pets });
});
};
通过指定ID获取宠物
var getPet = function(req, res) {
Pet.findById({ _id: req.params.pet_id }, function(err, pet) {
if (err) {
res.json({ message: 'error', data: err });
return;
}
res.json({ message: 'done', data: pet });
});
};
更新宠物信息
var updatePet = function(req, res) {
Pet.update({ _id: req.params.pet_id }, { quantity: req.body.quantity }, function(err, num) {
if (err) {
res.json({ message: 'error', data: err });
}
res.json({ message: ' update' })
})
};
删除宠物信息
var deletePet = function(req, res) {
Pet.remove({ _id: req.params.pet_id }, function(err) {
if (err) {
res.json({ message: 'error', data: err });
}
res.json({ message: 'pet remove!' })
});
};
导出函数
module.exports = {
postPets: postPets,
getPets: getPets,
getPet: getPet,
updatePet: updatePet,
deletePet: deletePet
}
更新server.js
在server.js
中更新路由:
router.route('/pets')
.post(petController.postPets)
.get(petController.getPets);
router.route('/pets/:pet_id')
.get(petController.getPet)
.put(petController.updatePet)
.delete(petController.deletePet);
Postman测试
我们现在已经对宠物园的宠物实施了全面的CRUD,下一节我们将创建用户账户,使用Passport进行身份验证。
完整代码请访问github