以下 Node.js 模块按照预期在初始化期间记录 ModelA
两次和 ModelB
两次。然后模型参数会以某种方式被覆盖,当我尝试使用路由时,它总是记录 ModelA
。
module.exports = (model) => {
console.log(model.modelName);
return (db) => {
console.log(model.modelName);
router.post('/', (req, res, next) => {
console.log(model.modelName);
model.insertMany(req.body, (err, docs) => {
if(err) return next(err);
res.json(docs);
});
});
return router;
};
};
该模块的使用方式如下:
const express = require('express');
const router = express.Router();
const plural = require('./plural.js');
module.exports = (db) => {
router.use('/a', plural(db.ModelA)(db));
router.use('/b', plural(db.ModelB)(db));
return router;
};
最佳答案
假设您仅在plural.js顶部创建一个新的Router
实例,那么您需要在添加路由的函数内创建Router
实例处理程序 (router.post(...)
),否则您将两次返回相同的 Router
实例,并且第二次调用 plural()
只是附加到同一个 Router
。因此,基于 ModelA
的路由处理程序将始终首先执行并响应请求(除非它调用 next()
)。例如:
const Router = require('express').Router;
// const router = new Router(); // <--- move this line ...
module.exports = (model) => {
return (db) => {
const router = new Router(); // <--- ... to here
router.post('/', (req, res, next) => {
console.log(model.modelName);
model.insertMany(req.body, (err, docs) => {
if(err) return next(err);
res.json(docs);
});
});
return router;
};
};
关于javascript - 函数参数被覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44140153/