前一段时间学习了 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 获取一条数据的示例