Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在nodejs中为多个目标设置反向代理?_Javascript_Node.js_Proxy_Reverse Proxy - Fatal编程技术网

Javascript 如何在nodejs中为多个目标设置反向代理?

Javascript 如何在nodejs中为多个目标设置反向代理?,javascript,node.js,proxy,reverse-proxy,Javascript,Node.js,Proxy,Reverse Proxy,我正在使用nodejs、expressjs和request创建一个反向代理 我想要的是当一个请求被发送到 相应的页面已加载 例如,如果我输入 谷歌网站将被加载 如果我进去 将加载stackoverflow页面 我尝试了与这里类似的代码 var request = require('request'); app.get('/google', function(req,res) { //modify the url in any way you want var newurl = 'http

我正在使用nodejs、expressjs和request创建一个反向代理

我想要的是当一个请求被发送到 相应的页面已加载

例如,如果我输入 谷歌网站将被加载 如果我进去 将加载stackoverflow页面

我尝试了与这里类似的代码

var request = require('request');
app.get('/google', function(req,res) {
  //modify the url in any way you want
  var newurl = 'http://google.com/';
  request(newurl).pipe(res);
});
问题是,它加载页面,但不是完全加载,因为页面本身希望加载图像、css等内容,并发出像/images/example.jpg这样的请求 这些显然以404错误结束

有人有解决这个问题的简便方法吗?
特别是因为简单地为/images设置路由是不好的,因为我有两个可能的目标服务器,代理不知道哪一个是正确的。

首先,这是一个转发代理,其次,这是您想要的工作代码,请随意修改

http://127.0.0.1:5432/yahoo.com

var request = require('request');
var express = require('express')();
var session = require('cookie-session');

express.set('trust proxy', 1)
express.use(session({
  keys: ['key1', 'key2']
}))

express.use(function(req,res,next)
{
    if(req.url.indexOf('.com') < 0)
    {
        request('http://'+req.session.domain+'/'+req.params.site,function(err,response,body)
        {
            if(err)
                res.status(500).send(err);
            else
                res.send(body);
        });
    }
    else
        next();
});
express.get('/:site',function(req,res)
{
    request('http://'+req.params.site,function(err,response,body)
    {
        req.session.domain = req.params.site;
        if(err)
            res.status(500).send(err);
        else
            res.send(body);
    });
});
express.listen(5432);
var request=require('request');
var express=require('express')();
var session=require('cookie-session');
express.set('trust proxy',1)
快速使用(会话)({
键:['key1','key2']
}))
express.use(函数(req、res、next)
{
if(req.url.indexOf('.com')<0)
{
请求('http://'+req.session.domain+'/'+req.params.site,函数(err,response,body)
{
如果(错误)
资源状态(500)。发送(错误);
其他的
决议(正文);
});
}
其他的
next();
});
express.get('/:site',函数(req,res)
{
请求('http://'+req.params.site,函数(err,response,body)
{
req.session.domain=req.params.site;
如果(错误)
资源状态(500)。发送(错误);
其他的
决议(正文);
});
});
快听(5432);