node结合mongoose和restful规范设置通用api

关于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)
}
上一篇:Sql获取当前日期是星期几的代码总结


下一篇:Mongoose 聚合数据