Articles of http

node.js从原始http请求string创build对象

我有一个原始的HTTP请求string,我需要创build一个对象表示。 而不是重新发明轮子,我正在考虑使用内部http分析器来获取http.IncomingMessage的一个实例 可能吗? 我想是因为string和完整的string没有太大的区别。 怎么做? 我看了一下源代码,他们得到一个请求parsing器如下 var HTTPParser = process.binding('http_parser').HTTPParser; var parser = new HTTPParser(HTTPParser.REQUEST) 编辑 从node.jstesting中取得一些进展 var request = Buffer(raw); var parser = new HTTPParser(HTTPParser.REQUEST); parser.execute(request, 0, request.length); 编辑2 一些事件处理者失踪(所有这些) parser.onHeadersComplete = function(res) { console.log('onHeadersComplete'); console.log(res); }; parser.onBody = function(body) { console.log('body done'); console.log(body.toString()); } parser.onMessageComplete = function(res) { console.log('done'); }; 谢谢

Node.js HTTP请求没有返回完整的响应

我正在使用Node的http模块发出HTTP请求,但在data ,返回的块似乎并不满足完整的请求响应。 这是我的代码: var req = http.request(httpOptions, function(res) { res.setEncoding('utf8'); }); req.on('response', function (response) { response.on('data', function (chunk) { console.log(chunk); callback(null, JSON.parse(chunk)); }); }); req.on('error', function(e) { callback(e); //callback(e.message); }); req.end(); 在结束请求之前是否有办法等待完整输出? 难道我做错了什么? 谢谢!

Http请求与节点?

如何使用与此代码等效的node.js创buildHttp请求: curl -X PUT http://localhost:3000/users/1

node.js在发出http请求时区分错误

我的node.js应用程序使用http.request到REST API http://army.gov/launch-nukes ,我需要区分三种可能的情况: Success – 服务器答复肯定。 我知道我的敌人被毁灭了。 Failure – 我收到来自服务器的错误, 或者无法连接到服务器 。 我仍然有敌人。 Unknown – build立到服务器的连接后 ,我发送了请求 – 但不知道发生了什么。 这可能意味着请求永远不会将其发送到服务器,或者服务器对我的响应从未做到。 我可能会也可能不会刚刚开始一场世界大战。 正如你所看到的,鉴别Failure和Unknown情况对我来说是非常重要的,因为它们有着非常不同的后果和我需要采取的不同的行动。 我也非常喜欢使用http Keep-Alive,正如我能说的那样,我是一个战争贩子,并计划以连发的方式提出大量请求(然后长时间没有任何请求) – 问题的核心是如何将连接错误/超时(这是一个Failure )与请求被置于连线(这是一个Unknown )之后发生的错误/超时分开。 在伪代码逻辑中,我想这样做: var tcp = openConnectionTo('army.gov') // start a new connection, or get an kept-alive one tcp.on('error', FAILURE_CASE); tcp.on('connectionEstablished', function (connection) { var req = connection.httpGetRequest('launch-nukes'); req.on('timeout', […]

基于Promise的节点的http框架?

节点框架通常通过(err, result)callback来工作。 Node是否有一个基于承诺的http框架,并且有一个健康的社区和积极的开发(例如express)?

Node.js在HTTP 80端口上侦听EACCES错误(权限被拒绝)

Node.js在http端口80(默认端口)上运行时抛出以下错误: – Error: EACCES, Permission denied at Server._doListen (net.js:1062:5) at net.js:1033:14 at Object.lookup (dns.js:132:45) at Server.listen (net.js:1027:20) at [object Context]:1:3 at Interface.<anonymous> (repl.js:150:22) at Interface.emit (events.js:42:17) at Interface._onLine (readline.js:132:10) at Interface._line (readline.js:387:8) at Interface._ttyWrite (readline.js:564:14) 我想出了这个节点需要有root权限。 传统上,我们避免在正常情况下给予root权限。 在端口80(或端口<1024)上使用它的最佳实践是什么? 这个链接有相同的问题,但它只有一个答案,即PREROUTING。 而我的解决scheme也提供其他方式。 我写这个是为了在一个位置有所有的答案,因为我必须去彻底的其他资源比PREROUTING。 为什么不是所有的答案在一个地方分享知识

nodejs作为http服务器有多健壮?

如果我使用nodejs的http模块来创build一个简单的http服务器,那么我需要做多lessvalidation/检查? 该模块是否处理诸如格式错误的请求和具有恶意标头值的请求之类的安全问题? 模块是否确保遵循http规范,还是必须进行大量检查以确保服务器不易崩溃? 编辑:让我们说nodejs不做任何真正的validation,我敢肯定是这样的。 我必须做些什么来确保我的服务器不易被破坏?

Nodejs套接字挂断&ECONNRESET – 从meteor到Node js服务器的HTTP post请求

我正在使用节点服务器来处理所有的推送通知服务,如gcm和apn。 我有2个不同的服务器。 一个运行Meteor,另一个运行Node.JS来处理推送通知。 (两者都是不同的服务器) 我的主要应用程序在Meteor服务器上运行。 我向node.js服务器发送一个HTTP post请求来发送我的通知。 通常它工作正常,但有时在Meteor服务器上,每当我调用node.js服务器时,都会收到此错误: socket hang up\n at Object.Future.wait (/home/myPc/.meteor/packages/meteor-tool/.1.1.10.ki0ccv++os.linux.x86_64+web.browser+web.cordova/mt-os.linux.x86_64/dev_bundle/server-lib/node_modules/fibers/future.js:398:15)\n at Object.<anonymous> (packages/meteor/helpers.js:119:1)\n at Object.HTTP.call (packages/meteorhacks_kadira/lib/hijack/http.js:10:1)\n at Object.sendPushNotificationsMeteorServer (server/pushNotifications.js:249:1)\n at server/classes/pushNotifications.js:244:1\n at [object Object]._.extend.withValue (packages/meteor/dynamics_nodejs.js:56:1)\n at packages/meteor/timers.js:6:1\n at runWithEnvironment (packages/meteor/dynamics_nodejs.js:110:1)\n – – – – -\n at createHangUpError (http.js:1473:15)\n at Socket.socketOnEnd [as onend] (http.js:1569:23)\n at Socket.g (events.js:180:16)\n at Socket.emit (events.js:117:20)\n at _stream_readable.js:944:16\n […]

来自http请求的Node.js响应在不包含'data'事件的情况下不调用'end'事件

所以我有一个简单的客户端应用程序与node.js中的服务器端应用程序进行通信。 在客户端,我有以下代码: function send (name) { http.request({ host: '127.0.0.1', port: 3000, url: '/', method: 'POST' }, function (response) { response.setEncoding('utf8'); response.on('data', function (data) { console.log('did get data: ' + data); }); response.on('end', function () { console.log('\n \033[90m request complete!\033[39m'); process.stdout.write('\n your name: '); }); response.on('error', function (error) { console.log('\n Error received: ' + error); }); […]

如何使用node.js http服务器从mongodb返回大量的行?

我在MongoDB中有一个用户数据库,我想通过JSON中的REST接口导出。 问题是在最坏的情况下,返回的行数已经超过200万。 首先我试过这个 var mongo = require('mongodb'), Server = mongo.Server, Db = mongo.Db; var server = new Server('localhost', 27017, {auto_reconnect: true}); var db = new Db('tracking', server); var http = require('http'); http.createServer(function (request, response) { db.collection('users', function(err, collection) { collection.find({}, function(err, cursor){ cursor.toArray(function(err, items) { output = '{"users" : ' + JSON.stringify(items) + '}'; response.setHeader("Content-Type", […]