如何对不同的集合/模型使用相同的express路由和相同的mongo模式



目前我有以下设置

models/sourceModel.js

var mongoose =  require('mongoose');
const Schema = mongoose.Schema;
const sourceModel = new Schema({
title: { type: String   },
// and lots more
})
module.exports =  {
Books: mongoose.model('Books', sourceModel),
Videos: mongoose.model('Videos', sourceModel)
}

然后两条完全相同的不同路线

./routes/booksRoutes.js

var {Books} = require("../models/sourceModel");
const Router = express.Router();
Router
.get("/", (req, res) => {
Books.find({}, ...);
})
//more complex routes

./routes/videosRoutes.js

var {Videos} = require("../models/sourceModel");
const Router = express.Router();
Router
.get("/", (req, res) => {
Videos.find({}, ...);
})
//more complex routes

./routes/index.js

API.use("/videos", require("./videosRoutes"));
API.use("/books", require("./booksRoutes"));

正如我试图展示的,唯一改变的是这个

Books: mongoose.model('Books', sourceModel),
Videos: mongoose.model('Videos', sourceModel)

我想删除/videosRoutes.js,将/booksRoutes.js重命名为/Routes.js,并以某种方式在./routes/index.js中提供相同的路由、相同的模式,但不同的型号和路由名称。

您可以像以下这样动态访问模型:

Router
.get("/", (req, res) => {
mongoose.model(`${req.path}`).find({}, ...);
})

注意:不要忘记将此路径大写以匹配型号名称并正确导入

最新更新