功能参数被覆盖

时间:2017-05-23 16:18:40

标签: javascript node.js express mongoose

以下node.js模块在初始化期间两次ModelAModelB两次,如预期的那样。然后模型参数以某种方式被覆盖,当我尝试使用路由时,它总是记录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;
};

1 个答案:

答案 0 :(得分:1)

假设您只是在plural.js的顶部创建一个新的Router实例,那么您需要在添加路由处理程序的函数内创建Router实例({{1} }),否则您将同时返回相同的router.post(...)实例,而对Router的第二次调用只会附加到同一plural()。因此,基于Router的路由处理程序将始终首先执行并响应请求(除非它调用ModelA)。例如:

next()