如何使用app.all将req.path发送到其他域?

时间:2017-06-05 19:43:52

标签: express

在我目前的环境中,这有效:

router.get("/test", function(req,res,next){
    request({
        uri: 'http://my_virtual_machine:8080/rest/stuff/test',
    }).pipe(res)
})

这样,当我向http://localhost:3000/test发送请求时,我会收到http://my_virtual_machine:8080/rest/stuff/test/的预期回复。但是,我宁愿不重写每一个api。

有没有办法简单地将req.path传递给虚拟机?

我试过了:

router.all("*", function(req,res,next){
    request({
        uri: 'http://my_virtual_machine:8080/' + req.path,
    }).pipe(res)
})

但是当我请求http://localhost:3000/test时,我收到此错误 -

  

GET http://localhost:3000/test 404 (Not Found)

另外,我必须发送所有HTTP命令(GET,POST,PUT等),这就是我使用all的原因,因为我理解all“匹配所有HTTP动词“[doc]。

1 个答案:

答案 0 :(得分:0)

我将router.all更改为router.use,并删除了路径参数。这是有效的:

router.use(function(req,res,next){
    request({
        uri: 'http://my_virtual_machine:8080' + req.path,
    }).pipe(res)
})

感谢@yBrodosky的评论,这使我朝着正确的方向前进。阅读docs for router.use后,我看到它没有路径参数时,它适用于所有网址。因为我使用它作为VM访问的严格管道(为了应用访问控制头),这就是我必须要做的。