我们有一个node.js / express.js应用程序(nodeServer.js),它支持一组路由,如下所示:
// Routes
var xml = require('./routes/xml');
var process = require('./routes/api/process');
.
.
.
// Routes
app.use('/arest/xml', xml);
app.use('/api/process', process);
.
.
当执行process.js时,它首先检查req.headers的内容类型,如果是application / xml,它执行与xml.js中的处理基本相同的处理(如果content-type是application / json,它会执行不同的处理。
换句话说,xml.js的处理(和代码)基本上是复制的。
该代码已经存在了一段时间了,现在我被要求对xml.js的处理进行一些增强,这意味着我必须在两个地方进行相同的更改(在xml.js并在process.js中复制相同的更改。
有没有办法让xml.js中的处理只是分支并在process.js中进行处理,如果它发现请求内容类型是application / xml,而不是必须不断维护两个文件中的代码相同?
我很抱歉这种解释有点尴尬。
谢谢, 吉姆
答案 0 :(得分:0)
从use参数中删除URL,每个路径都会被您的函数命中。然后,您可以将基本或公共逻辑应用于所有并保留专用路由,以便为特定路由保留更具体的处理。例如:
app.use(sharedRouteLogic) //executed on all routes
app.use('/arest/xml', xmlSpecificRoute);
app.use('/api/process', processSpecificRoute);
后期处理标题或缓存
同样的逻辑适用于回应。您可以配置应用于所有响应的回调。
app.use(function(req, res, next) {
res.header('Cache-Control', 'private, no-cache, no-store, must-revalidate');
res.header('Expires', '-1');
res.header('Pragma', 'no-cache');
next();
})