【问题标题】:Redirect all requests if condition satisfied using middleware如果条件满足,则使用中间件重定向所有请求
【发布时间】:2018-11-13 10:37:50
【问题描述】:
  • 我有一个 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))   

【问题讨论】:

  • 你到底是什么意思?快速路由中间件看起来像 'the/url/path/', middleware1, middleware2, (req, res) => {})
  • 请看我的编辑@noa-dev
  • 根据我的经验,使用路径 (/api) 比使用标题更常见,然后您可以直接放入现有工具,例如 github.com/chimurai/http-proxy-middleware(我认为您无论如何都可以使用自定义匹配过滤器,但路径更简单)。

标签: javascript node.js express url-redirection


【解决方案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);
});

【讨论】:

    【解决方案2】:

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

    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

    【讨论】:

      猜你喜欢
      • 2023-02-22
      • 1970-01-01
      • 1970-01-01
      • 2021-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-17
      相关资源
      最近更新 更多