mysql - 管道 `request` 响应 MySQL 回调中的服务器响应未按预期工作? Node

标签 mysql node.js http callback request

我在尝试理解为什么我在下面提供的代码没有按预期工作时遇到了令人沮丧的事情。基本概念是:

浏览器 -> 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);

非常欢迎您的想法和知识,并在此先感谢您。

最佳答案

因为对 mysql 的查询是异步的,当时间结束时,请求已完成发出所有数据。您需要暂停请求,直到回调完成。

var server = httpProxy.createServer(function(request, response) {
  request.pause();
  connection.query('SELECT 1', function(err, rows) {        
    if(rows.length) 
    {
      request.resume();
      proxy = requester({
        url: 'http://www.srcnix.com',
        method: 'GET'
      });      

      // PIPE FAILS TO WORK!                
      request.pipe(proxy);
      proxy.pipe(response);
    }
  });      
});

Have a look here, this is where i got the response from and worked for me!

关于mysql - 管道 `request` 响应 MySQL 回调中的服务器响应未按预期工作? Node ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14261863/

相关文章:

mysql - 如何更改 phpMyAdmin 中的事件

c# - 使用 Entity Framework 进行多对多对多

c# - 如何在 c# 中为 mysql 处理空日期而不将它们转换为空

javascript - Node.js 和 XAMPP 有什么区别

php - 如何从连接 5 个不同表的 mysql 数据库检索数据

node.js - 更改 git 分支时切换 node_modules 文件夹

javascript - 如果我使用的是 node.js,我还需要队列服务吗?

node.js - 不使用模板引擎的 Koa 渲染

ruby - 如何从 Savon 请求中删除 "SOAPAction"HTTP header

web-services - 使用 Webhooks 你知道哪些 Web 应用程序