node.js - 使用带有请求包和函数pipe()的nodejs服务器?

标签 node.js express node.js-stream node-request

我目前正在使用 Nodejs 服务器来模拟后端。服务器是一个网络服务器,根据不同的请求返回 json 对象,工作完美。现在我必须从另一个域获取 json 对象,因此我必须代理服务器。我找到了一个名为 request 的包在 npm 中。我可以让这个简单的示例正常工作,但我必须转发整个网页。

我的代理代码如下所示:

var $express = require('express'),
$http = require('http'),
$request = require('request'),
$url = require('url'),
$path = require('path'),
$util = require('util'),
$mime = require('mime');

var app = $express();

app.configure(function(){
  app.set('port', process.env.PORT || 9090);
  app.use($express.bodyParser());
  app.use($express.methodOverride());

  app.use('/', function(req, res){
    var apiUrl = 'http://localhost:9091';
    console.log(apiUrl);
    var url = apiUrl + req.url;
    req.pipe($request(url).pipe(res));
  });  
});

$http.createServer(app).listen(app.get('port'), function () {
  console.log("Express server listening on port " + app.get('port'));

  if (process.argv.length > 2 && process.argv.indexOf('-open') > -1) {
    var open = require("open");
    open('http://localhost:' + app.get('port') + '/', function (error) {
      if (error !== null) {
        console.log("Unable to lauch application in browser. Please install 'Firefox' or 'Chrome'");
      }
    });
  }
})

我正在登录真实服务器,它运行正常,我可以跟踪获取响应,但正文是空的。我只想通过 request.pipe 函数从nodejs服务器传递整个网站。有什么想法吗?

最佳答案

由于在 Node.js 中,a.pipe(b) 返回 b(请参阅 documentation ),因此您的代码等效于:

// req.pipe($request(url).pipe(res))
// is equivalent to
$request(url).pipe(res);
req.pipe(res);

由于您只需要一个代理,因此无需将 req 通过管道传输到 res (在这里,将多个可读流通过管道传输到一个可写流中是没有意义的),只要保留这个,你的代理就会工作:

$request(url).pipe(res);

关于node.js - 使用带有请求包和函数pipe()的nodejs服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22296571/

相关文章:

node.js - 将 spookyjs 环境中的值存储到 mongoDB 中

javascript - node.js 的框架 + 数据库

javascript - 将 JSON 数据附加到 Node.js 中的现有对象数组

javascript - Node.js 和 Express : Sequential execution flow one mongodb query request after another

mysql - 如何获取今天的 sequelize js 记录

javascript - Node.js child.stdin.write 不起作用

javascript - 根组件作为 React.component

react-native - JSON解析错误: Unrecognized token '<' - React Native

node.js - 大文件上传到 Azure blob 在 Node.js 中处理

javascript - Node.js:充当对象的嵌套元素名称的变量