前一段時間學習了 node.js 操作 mongoDB 數據庫,現在追加一篇寫接口的記錄。
連結數據庫#
在項目根目錄下安裝 Mongoose
npm install mongoose --save
利用 mongoose 來連結 MongoDB 在項目中創建db.js文件:
'use strict';
import mongoose from 'mongoose';
mongoose.connect('mongodb://localhost:27017/test', { useNewUrlParser: true, useUnifiedTopology: true });
const db = mongoose.connection;
db.once('open' ,() => {
console.log(
'連接數據庫成功'
);
})
db.on('error', function(error) {
console.error(
'Error in MongoDb connection: ' + error
);
mongoose.disconnect();
});
db.on('close', function() {
console.log(
'數據庫斷開,重新連接數據庫'
);
});
export default db;
創建數據模型(建一張表)#
在 test 數據庫中創建一張名為StudentSchema的表,表中有 name 和 age 字段,並且公出。
import mongoose from 'mongoose';
//創建schema
const StudentSchema = new mongoose.Schema({
name: String,
age: Number
})
const studentSchema = mongoose.model("StudentSchema",StudentSchema);
export default studentSchema;
接口路由搭建#
添加 body-parser 依賴:
npm install body-parser
在 app.js 中引入:
import bodyParser from 'body-parser';
//使用body-parser中間件
app.use(bodyParser.urlencoded({extended:false}));
app.use(bodyParser.json());
新建一個 js 文件,用於寫數據接口 req.body 指的是 URL 中的參數,req.params 指的是路徑
import express from 'express';
import studentInfo from './studentInfo';
const router = express.Router();
router.get("/test",(req,res)=>{
res.json({msg:"接收成功"});
//示例:http://localhost:3000/test
})
//添加一條數據
router.post('/add',(req,res) => {
const Student = {};
if(req.body.name){
Student.name = req.body.name;
}
if(req.body.age){
Student.age = req.body.age;
}
new studentInfo(Student).save().then(user => {
res.json(user);
});
})
//根據id刪除一條數據
router.post('/delete',(req,res) => {
studentInfo.remove({_id:req.body.id}).then((result)=>{
res.json(result)
})
})
//獲取一條數據
router.get('/:id',(req,res) => {
studentInfo.findOne({_id:req.params.id}).then(user => {
if(!user) {
return res.status(400).json("沒有任何數據存在")
}
return res.json(user)
}).catch(err => {
return res.status(404).json(err)
})
})
//更新一條數據
router.post('/:id',(req,res) => {
const Student = {};
if(req.body.name){
Student.name = req.body.name;
}
if(req.body.age){
Student.age = req.body.age;
}
studentInfo.updateOne({ _id: req.params.id }, { $set: Student }).then(user => {
if (!user) {
return res.status(400).json("數據不存在");
}
res.json(user);
})
.catch(err => {
return res.status(404).json(err);
});
})
module.exports = router;
使用#
在 app.js 中引入:
import test from './test';
app.use(test);
利用 Postman 測試#
POST 測試:#
將 POST 的 body 設置成x-www-form-urlencoded,下圖為更新數據的接口示例:
GET 測試:#
下圖為根據 ID 獲取一條數據的示例