有没有办法在express(node.js)中设置中间件,以便在每个路由中返回特定值?

时间:2015-05-14 00:47:59

标签: json node.js express

我特别提到的情况涉及使用json web令牌(jwt)。例如,如果该Web令牌过期而没有重复代码,我将如何自动添加中间件以仅返回新的json Web令牌?下面的示例代码将显示我的意思。

var token;
if (req.token) {
    token = req.token;
};

正如您所看到的,使用此块的两个路由中的代码都是重复的:

// Shift Four Left
VG[0] = (byte)((byte)(VG[1] >> 4) + (byte)(VG[0] << 4));
VG[1] = (byte)((byte)(VG[2] >> 4) + (byte)(VG[1] << 4));
VG[2] = (byte)(VG[2] << 4);

// Shift Four Right
VG[2] = (byte)((byte)(VG[2] >> 4) + (byte)(VG[1] << 4));
VG[1] = (byte)((byte)(VG[1] >> 4) + (byte)(VG[0] << 4));
VG[0] = (byte)(VG[0] >> 4);

我可以使用快速中间件来防止这种重复吗?

1 个答案:

答案 0 :(得分:0)

使用“中间件”实现此目的的唯一方法是在middlware链的末尾设置一个处理程序来发送响应。这意味着您的所有处理程序都必须将请求和响应传递给链。它基本上是404处理程序之前的最后一个处理程序。我不建议尝试。或者,您可以为快速应用创建自定义响应方法。

var app = require('express')();

app.response.myJsonRes = function(obj) {
    if (this.req.token) {
        obj.token = this.req.token;
    }
    this.json(obj);
};

app.get('/myRoute', function(req, res) {
   // get data somehow
   res.myJsonRes(data);
});

您甚至可以更改标准json方法。

var prevJson = app.response.json;
app.response.json = function(obj) {
    if (this.req.token) {
       obj.token = this.req.token;
    }
    prevJson.call(this, obj);
};