リクエストごとに vm.runInNewContext で別のスクリプトを実行する handleRequest コールバックを備えた http サーバーがあります。vm.runInNewContext 内で実行されるスクリプトは、いくつかの非同期 HTTP ポスト リクエストを作成し、ポストからのレスポンスを取得した後にのみサーバー レスポンスを書き込みます。その結果、サーバー応答が書き込まれる前に、handleRequest コールバックのコードが終了します。安全ですか?または、この状況を回避する方法はありますか?
ここにいくつかのコードがあります:
var server = http.createServer(handleRequest);
server.listen(8080);
var handleRequest = function (request, response) {
// get request data...
var context = {
ServerRequest : request,
ServerResponse : response
};
var stringScript = // a string with the script that posts data
var script = vm.createScript(stringScript);
script.runInNewContext({ context: context });
}
スクリプト文字列はこれを行います:
var request = require('request');
var options = {....}
var req = request.get(options);
req.on('response', function (res) {
var chunks = [];
res.on('data', function(chunk) {
chunks.push(chunk);
});
res.on('end', function() {
var buffer = Buffer.concat(chunks);
var encoding = res.headers['content-encoding'];
if (encoding == 'gzip') {
zlib.gunzip(buffer, function(err, decoded) {
// set response headers and write the response
context.ServerResponse.end(decoded.toString());
});
} else if (encoding == 'deflate') {
zlib.inflate(buffer, function(err, decoded) {
// set response headers and write the response
context.ServerResponse.end(decoded.toString());
})
} else {
// set response headers and write the response
context.ServerResponse.end(buffer.toString());
}
});
});