【发布时间】:2011-12-19 12:04:57
【问题描述】:
这个问题很简单。我想使用 Node.js 服务器作为代理来记录、验证 HTTP 查询并将其转发到后端 HTTP 服务器(PUT、GET 和 DELETE 请求)。
为此我应该使用什么库?恐怕我找不到。
【问题讨论】:
这个问题很简单。我想使用 Node.js 服务器作为代理来记录、验证 HTTP 查询并将其转发到后端 HTTP 服务器(PUT、GET 和 DELETE 请求)。
为此我应该使用什么库?恐怕我找不到。
【问题讨论】:
NodeJS 支持 http.request 作为标准模块: http://nodejs.org/docs/v0.4.11/api/http.html#http.request
var http = require('http');
var options = {
host: 'example.com',
port: 80,
path: '/foo.html'
};
http.get(options, function(resp){
resp.on('data', function(chunk){
//do something with chunk
});
}).on("error", function(e){
console.log("Got error: " + e.message);
});
【讨论】:
resp.setEncoding('utf8');(或您使用的任何编码)以将数据作为 utf8 字符串。如果我理解正确,否则您将获得 Buffer 对象,并且如果将多字节字符拆分为两个块,则最终可能会遇到多字节字符问题。 (刚刚调试了一段时间相关的问题)
request npm 模块了。
node-http-proxy 是一个很好的解决方案,正如上面@hross 所建议的那样。如果您对使用节点没有死心,我们使用NGINX 来做同样的事情。它与节点一起工作得很好。例如,我们使用它来处理 SSL 请求,然后再将它们转发到节点。它还可以处理缓存和转发路由。耶!
【讨论】:
您可以使用内置的http 模块来执行http.request()。
但是,如果您想简化 API,您可以使用 superagent 等模块
【讨论】:
我会结合node-http-proxy 和express。
node-http-proxy 将通过RoutingProxy 支持您的 node.js Web 服务器内的代理(请参阅名为 另一个 http 服务器内的代理请求的示例)。
在您的自定义服务器逻辑中,您可以使用 express 进行身份验证。请参阅auth sample here for an example。
结合这两个例子应该会给你想要的。
【讨论】:
您可以使用 node.js http 模块来做到这一点。您可以查看Node.js HTTP 的文档。
您还需要将查询字符串传递给其他 HTTP 服务器。您应该在ServerRequest.url 中拥有它。
获得这些信息后,您可以在http.request() 中提供的选项中传入后端 HTTP 服务器和端口
【讨论】: