如果使用中间件满足条件,则重定向所有请求

时间:2018-06-04 06:42:57

标签: javascript node.js express url-redirection

  • 我有一个运行expressjs服务器的实例,用于SPA。
  • 我的API位于另一台服务器上,因此我需要退回我的API请求。
  • 我想创建一个中间件,如果遇到某种情况,会将所有这些请求重定向到另一台主机。
  • 要处理的请求是请求标头中包含target: API的请求

到目前为止,这是我的中间件的样子,我能够捕获符合条件的选定请求:

function apiHelmet(req, res, next) {
    if (req.get('target') === 'API') {
        /*
            find a way to redirect requests of all methods and pipe result to response
        */
        return res.send(response_from_external_api)
    }
    return next()
}

我的设置:

app.use(apiHelmet)
app.get('*', renderSPA)

示例发布请求:

axios({
    method: 'POST',
    data: { id: 123, first_name: 'john', last_name: 'doe' },
    url: '/users',
    headers: {
        target: 'API'
    }

} ).then(result=>console.log(result))   

2 个答案:

答案 0 :(得分:1)

尝试此操作,使用请求模块调用另一个外部API,并将外部API响应直接传递给您的服务器响应。

var request = require('request');

app.use(apiHelmet)
app.get('*', function (req, res, next) {
    req.pipe(request('SOME URL').on('error', function (err) {
        return res.status(400).send(err)
    })).pipe(res);
});

答案 1 :(得分:-1)

您可以使用以下代码轻松完成此操作。

function apiHelmet(req, res, next) {
    if (req.get('target') === 'API') {
        return res.send('caught ya')
        req.post({url: 'http://end-point', headers: req.headers, body: req.body});
        processRequest(req);
        res.setHeader('Content-Type', 'application/json');
        res.send('Req OK');
    }
    return next()
}

有关详情see