关于node结合monogoos设置restful规范的通用api接口
第一步创建server文件夹创建app.js
mkdir server
cd server
NUL app.js
第二步 引入mongoose,express,cors
npm i mongoose express cors
第三步 创建文件夹规范化
mkdir routes // api接口路由 => index.js
mkdir plugin // 插件 db文件=> db.js
mkdir models // 模块 mongoose => 模块名称.js 设置并导出Schema
第四步 在app.js中开始封装
const express = require('express');
const cors = require('cors');
const app = express();
app.use(express.json());
app.use(cors());
require('./routes/index.js')(app) ;// 引入并调用
require('./plugin/db.js')(app); // 引入并调用
app.listen(3000,()=>{
console.log('http://localhost:3000');
})
第五步 在plugin的db文件里导出mongoose配置
module.exports = app=>{
const mongoose = require('mongoose');
const dbName = 'heroAll'; // 数据库名称
mongoose.connect(`mongodb://127.0.0.1:27017/${dbName}`);
}
第六步 在models文件定义Schema来操作
// 这里不进行封装 封装的话会很难写 复杂化了
const mongoose = require('mongoose');
const Schema = mongoose.Schema({
title:{type:String},
parant:{type:mongoose.Types.ObjectId,ref:"Category"}
// ref进行表关联 自己表关联查询 如果是2个表或者多表可以使用aggregate()
// ref里可能是小写注意一下,没有用编程软件敲。。。
})
module.exports = mongoose.model('Category',Schema)
// mongoose.model('定义名字',Schema,'如果不写 默认设置第一个参数的小写形式(设置指定表名)')
第七步 配置routes里index文件 设置通用api接口
const express = require('express')
module.exports = app =>{
const router = express.Router()
/*
* 通用接口 api CURD
*/
const result = {
code:200,
message:"请求成功"
}
/* ```````````````start```````````````````*/
/* 查 */
router.get('/',async(req,res)=>{
const queryOption = {}
if(req.mode.modelName === 'Category') {
queryOption.populate = "Category"; // 设置关联表
}
// setOptions 针对特殊的接口进行处理
const mode = await req.mode.find().setOptions(queryOption).limit()
res.send(...mode,...result)
})
/* 增加 */
router.post('/',async (req,res)=>{
await req.mode.create(req.body)
res.send(result)
})
/* 修改 */
router.put('/:id',async(req,res)=>{
await req.mode.findByIdAndUpdate(req.body.id,req.body)
res.send(result)
})
/* 删除 */
router.delete('/:id',async(req,res)=>{
await req.mode.findByIdAndDelete(req.body.id,req.body)
res.send(result)
})
/* ``````````````end````````````*/
/* 1.设置中间件 来根据前端传递的名称找到文件 */
const resoureName = (req,res,next)=>{
// npm i inflection 进行单复数转换
const resoureNamePath = require('inflection').classify(req.params.resoure)
// 挂载到req上
req.mode = require(__dirname+'../models'+resoureNamePath)
next() // 开启下一步 必须写
}
// 2.使用中间件 注入req.mode方法
app.use('/api/rest/:resoure',resoureName,router)
}