通用 CRUD 接口,就是后台通过前端的URL,动态获取到里面的需要的参数,将参数处理成我们的DB模型接口,就可以使用了
1.改造接口,形成动态接口
// 改造前
const express = require("express");
const router = express.Router();
const Category = require("../models/Category");
router.get("/categories", async (req, res) => {
let result = await Category.create(req.body);
res.send(result);
});
// 改造后
const express = require("express");
const router = express.Router({
mergeParams: true //合并url参数,获取url传的{:resource}
});
router.get("/", async (req, res) => {
let Model = require(`../../models/${req.params.resource}`);
res.send(result);
});
app.use("/admin/api/rest/:resource", router);
改造后的请求接口
会报错
因为我们拿到的是categories,但是我们要的是Category。
2.处理接口参数
- npm i inflection(处理格式的插件),这里我们要拿到Category,因为我们model定义的是Category。
-下面是获取 Category
const modelName = require("inflection").classify(req.params.resource); //复数转单数,首字母大写
res.send(modelName);
req.Model = require(`../../models/${modelName}`); //req.Model表示给请求对象上加上Model,之后的req都可以引用
- 为了避免给每个接口添加这两句,所以要在app.use()中使用中间件
// 通用CRUD接口
app.use("/admin/api/rest/:resource",async (req, res, next) => {
const modelName = require("inflection").classify(req.params.resource); //复数转单数,首字母大写
req.Model = require(`../../models/${modelName}`); //req.Model表示给请求对象上加上Model,之后的req都可以引用
next();
}, router);
改造完成
之后我们就可以通过Request URL,进行通用的增删改查,大大简化代码。