繁体   English   中英

有HTTP代理时,node.js不会自动传递库JS

[英]node.js not automatically passing library JS when there is http proxy

我设置了一个node-http-proxy来将站点/ n请求转发到node.js(在端口9000处),并将其他请求转发到apache(端口8000)。 这是因为我大量使用socket.io,并且我不希望apache为每个websocket请求创建一个线程。

在我想通过公共IP访问它之前,以下代码非常有用。 一切正常, 只有一件事-my_public_ip / n / socket.io / socket.io / js返回“ 404 Not Found”。 看来这个请求并没有被node.js默默吸收

httpProxy.createServer({
    router: {
        'localhost/n/': '127.0.0.1:9000',
        'localhost': '127.0.0.1:8000',
        'my_public_ip/n': '127.0.0.1:9000',
        'my_public_ip': '127.0.0.1:8000'
    }
}).listen(80);

function handler(req, res) {
    var pathName = url.parse(req.url).pathname;
    if(pathName.substr(0,2) == "//"){
        pathName = pathName.substr(1);
    }
    var pathSplit = pathName.split('/');
    nextURL = pathSplit.join('/').substr(8);
    if(pathSplit[1] == 'static'){
        fs.readFile(__dirname + '/static/' + nextURL, function(err, data) {
            if(err) {
                res.writeHead(404);
                return res.end('404 Not Found');
            }
            res.writeHead(200);
            res.end(data);
        });
    } else if(pathName !== '/'){
        fs.readFile(__dirname + '/index.html', function(err, data) {
            if(err) {
                res.writeHead(500);
                return res.end('Error loading file. Does it exist? (Reading ' + __dirname + ')');
            }
            res.writeHead(200);
            res.end(data);
        });
    }
}

节点http服务器正在为socket.IO提供客户端脚本。 发生的事情是,因为您没有将http流量代理到node.JS,所以无法看到客户端JS脚本。 (Socket.IO不会通过socket.IO连接推送JS脚本。)

最基本的解决方法是在Apache服务器上创建JS脚本的副本。 另一种方法是通过添加仅用于脚本路径的附加路由指令将请求路由到Node.JS。 我认为前者将为您提供更好的性能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM