私の開発環境では、リクエストと Websocket 接続をそれぞれのバックエンド サービスにプロキシする必要があります。このために、lite-serverとhttp-proxy-middlewareを使用しています。
私のライトサーバー構成ファイルは次のようになります。
var proxyMiddleware = require('http-proxy-middleware');
var oProxyOptions = {
target: 'http://localhost:3000/api',
ws: true,
pathRewrite: function (path, req) { return path.replace('/api', ''); },
changeOrigin: true
};
var oProxy = proxyMiddleware('/api', oProxyOptions);
module.exports = function(bs) {
return {
"port": 8000,
"files": ["./resources/**/*.{html,htm,css,js,xml}"],
"server": {
"baseDir": "./resources",
"middleware": {
1: oProxy
}
}
};
};
ただし、コンソールで常に次のエラーが表示されます。
WebSocket connection to 'ws://localhost:8000/api/ws' failed: Connection closed before receiving a handshake response
lite-server のコンソール出力で、次のエントリを実行します。
[HPM] GET /api/ws ~> http://localhost:3000/api/ws
[HPM] Upgrading to WebSocket
コンソール出力を見ると、接続がノード エンドポイントに到達していることもわかります。エンドポイントは次のように実装されます。
var ws = require('ws').Server;
var wss = new ws({ server: server, path:'/api/ws' });
wss.on('connection', function connection(ws) {
var location = url.parse(ws.upgradeReq.url, true);
console.log("New WS connection");
}
このエラーの原因は何ですか? 私の設定に何か問題がありますか?