簡體   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