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