以下に提供したコードが期待どおりに機能しない理由を理解しようとしてイライラしています。基本的な概念は次のとおりです。
ブラウザー -> Nodejs サーバー -> MySQL コールバック -> 要求 -> サーバー応答。
次のコードが期待どおりに機能する理由を誰かが説明できますか。
// Load modules
var http = require('http');
var https = require('https');
var httpProxy = require('http-proxy');
var url = require('url');
var qstr = require('querystring');
var path = require('path');
var requester = require('request');
var server = httpProxy.createServer(function(request, response) {
proxy = requester({
url: 'http://www.srcnix.com',
method: 'GET'
});
request.pipe(proxy);
proxy.pipe(response);
});
server.listen(8080);
ただし、要求を配置してコールバック内にパイプした瞬間、それが MySQL クエリ コールバック (次のように) であろうと別の要求コールバックであろうと、サーバーへの応答のパイプに失敗します。
// Load modules
var http = require('http');
var https = require('https');
var httpProxy = require('http-proxy');
var url = require('url');
var qstr = require('querystring');
var path = require('path');
var requester = require('request');
var globalConf = require('./config/global.js');
var mysql = require('mysql');
var connection = mysql.createConnection({
host: globalConf.db.portal.host,
user: globalConf.db.portal.username,
password: globalConf.db.portal.password,
database: globalConf.db.portal.database
});
var server = httpProxy.createServer(function(request, response) {
connection.query('SELECT 1', function(err, rows) {
if(rows.length)
{
proxy = requester({
url: 'http://www.srcnix.com',
method: 'GET'
});
// PIPE FAILS TO WORK!
request.pipe(proxy);
proxy.pipe(response);
}
});
});
server.listen(8080);
あなたの考えと知識は大歓迎です。事前に感謝します。