有可能分享"分享" node.js / express.js路由/代码?

时间:2018-02-22 01:16:19

标签: node.js express

我们有一个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,而不是必须不断维护两个文件中的代码相同?

我很抱歉这种解释有点尴尬。

谢谢, 吉姆

1 个答案:

答案 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();
})