ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2022-01-18 17:05:41  阅读:155  来源: 互联网

标签:node express const app req api mode mongoose


关于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)
}

标签:node,express,const,app,req,api,mode,mongoose
来源: https://blog.csdn.net/m0_51531365/article/details/122563704

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有