上一節(jié)中我們實現(xiàn)了一個基本的Node應用锦庸,它可以接受HTTP請求并返回靜態(tài)的JSON。在這一節(jié)中闰非,將對我們的寵物數(shù)據(jù)增加CRUD操作膘格。我們要學習如何連接MongoDB,使用Mongoose進行對象建模财松,實現(xiàn)GET,PUT,POST和DELETE接口瘪贱。
連接MongoDB
如果你還沒有安裝MongoDB,請登錄Mongo官網(wǎng)下載辆毡。
我們需要執(zhí)行三步來連接MongoDB:
- 安裝Mongoose包
- 加載Mongoose包
- 使用Mongoose.connect連接petpot MongoDB
server.js
中添加頁面的內(nèi)容:
// Load required packages
var express = require('express');
var mongoose = require('mongoose');
// Connect to the beerlocker MongoDB
mongoose.connect('mongodb://localhost:27017/beerlocker');
創(chuàng)建第一個模型-PET
在models
文件夾中創(chuàng)建pet.js
政敢。
打開pet.js
增加下面的內(nèi)容:
// 引入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包
- 創(chuàng)建一個映射到MongoDB集合的Mongoose模式胚迫,并定義該集合中文檔的格式
- 模式中包括3個字符串和1個數(shù)字喷户,其中3個字符串為必填項
- 導出mongoose pet模型用于接下來的應用中
創(chuàng)建第一個控制器-PET
在controller
文件夾中創(chuàng)建pet.js
打開controller/pet.js
,首先引入剛才我們創(chuàng)建的pet模型
var Pet = require('../models/pet');
現(xiàn)在為我們的寵物園添加寵物
接著在controller/pet.js
中添加頁面的內(nèi)容:
var Pet = require('../models/pet');
var postPets = function(req, res) {
// 創(chuàng)建Pet模型的一個實例
var pet = new Pet();
// 使用Post數(shù)據(jù)設置這個實例的屬性
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模型
- 創(chuàng)建一個函數(shù)
postPets
访锻,在函數(shù)中創(chuàng)建pet模型的實例褪尝,使用post的數(shù)據(jù)來設置這個實例的屬性并保存 - 導出函數(shù),方便接下來應用中使用
準備接收 POST或PUT的數(shù)據(jù)
安裝中間件body-parser
用于接收 POST或PUT的數(shù)據(jù)
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請求創(chuàng)建接口
router.route('/pets').post(petController.postPets);
使用Postman測試
image.png
獲取所有寵物
打開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!' })
});
};
導出函數(shù)
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測試
image.png
image.png
image.png
image.png
我們現(xiàn)在已經(jīng)對寵物園的寵物實施了全面的CRUD河哑,下一節(jié)我們將創(chuàng)建用戶賬戶,使用Passport進行身份驗證龟虎。
完整代碼請訪問github