你可以在快递中覆盖app.use吗?

时间:2017-02-24 16:57:50

标签: javascript node.js express

所以这很简单

var express = require('express');
var prodServices = require('./services');
//...a bunch of other vars;

var app = express();
app.use('/services', middleware1, middleware2, middleware3, middleware4, prodServices);


if(process.env.NODE_ENV === 'dev'){
   app.use('/services', require('./dev-services')); //has no effect
   // ... a bunch of other overwrites that work fine
}

该应用程序有很多功能,我非常希望在底部的单个if语句中保持“开发”模式更改,而不会触及文件的任何其他部分。

除了app.use之外,我的所有其他覆盖都很有效。重新声明相同的声明无效。所以我覆盖了每个函数:

middleware1 = middleware2 = middleware3 = middleware4 = function(req,res,next){next()};
prodServices = require('./dev-services')

某些中间件需要针对不同的路径运行,因此我更愿意简单地重新声明app.use('/services')语句。这可能吗?

修改

所以看看可能重复的问题,中间件堆栈存储在

app._router.stack  

人们建议最好不要弄乱它,所以我会找到一个不同的解决方案。但是,如果有人想以某种方式回答这个问题。我将标记为最佳答案。

0 个答案:

没有答案