javascript - 函数参数被覆盖

标签 javascript node.js express mongoose

以下 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/

相关文章:

javascript - Ajax上传仅将第一个文件传递给php文件

javascript - Coinbase pro web socket 获取货币的当前价格

javascript - Node : Send a file and data at once

javascript - 如何在 ExpressJS 中定义模块或类

ajax - 如何捕获此错误 NodeJs/Express?

javascript - 如何在 JavaScript 中使用 console.log() 在同一行打印?

javascript - 在链接jquery mobile中传递参数

node.js - 将测试数据库与 Restify 一起使用

node.js - 休息 |智威汤逊 |授权 : How To Verify Authorities For Secure Resources

javascript - 创建iframe中的js对象