Articles of http

基于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", […]

http获取NodeJS如何获取错误状态码?

好吧,我必须是密集的,因为我无法find任何地方如何获得错误状态代码时使用Node.JS http.get或http.request。 我的代码: var deferred = $q.defer(); var req = https.get(options, function(response){ var str = ''; response.on('data', function (chunk) { str += chunk; }); response.on('end', function () { console.log("[evfService] Got user info: "+str); deferred.resolve(str); }); }); req.on('error', function(e){ deferred.reject(e); }); 在那个“req.on”位中,我想要的是http状态码(即401,403等)。 我得到的是一个半无用的错误对象,它不给我代码或任何对响应对象的引用。 我已经尝试拦截在函数(响应)callback,但是当有一个404,它永远不会被调用。 谢谢!

使用http.request获取node.js中的二进制内容

我想从https请求中检索二进制数据。 我发现一个类似的问题 ,使用请求方法, 获取二进制内容在Node.js使用请求 ,是说设置编码为空应该工作,但它不。 options = { hostname: urloptions.hostname, path: urloptions.path, method: 'GET', rejectUnauthorized: false, encoding: null }; req = https.request(options, function(res) { var data; data = ""; res.on('data', function(chunk) { return data += chunk; }); res.on('end', function() { return loadFile(data); }); res.on('error', function(err) { console.log("Error during HTTP request"); console.log(err.message); }); }) 编辑:设置编码为“二进制”也不起作用

使用Nodejs HTTP Server定制HTTP方法

目前通过HTTP编写同步机制,我开始在NodeJS上构build我的服务器,这看起来是一个很好的解决scheme。 好的,我可以使用GET和HEAD方法。 但只要我尝试使用非标准方法,例如“SYNC”。 代码如下: var http = require("http"); var server = http.createServer(function (req, res) { res.writeHead(200); res.end(req.method); }); server.listen(8080); 看起来不错…让我们telnet这个,发出一个GET,然后发出一个SYNC请求 mylaptop:~ aob$ telnet localhost 8080 Trying ::1… telnet: connect to address ::1: Connection refused Trying 127.0.0.1… Connected to localhost. Escape character is '^]'. GET / HTTP/1.1 HTTP/1.1 200 OK Connection: keep-alive Transfer-Encoding: chunked 3 GET […]

ECONNREFUSED错误,在其他客户端不会出现node.js错误

我正在用node.js客户端发出一个http请求,并且我得到一个ECONNREFUSED错误。 当我使用我的浏览器或curl(1)来做出相同的请求时,它工作得很好 这是节点请求: var options = { host: 'localhost', port: 8080, path: '/explorers/1.0/agegroup', method: 'GET' }; var req = http.request(options, function(res) { res.setEncoding('utf8'); res.on('data', function (chunk) { console.log('BODY: ' + chunk); }); }); req.on('error', function(e) { console.log(e); }); req.end(); 它给了我错误: { [Error: connect ECONNREFUSED] code: 'ECONNREFUSED', errno: 'ECONNREFUSED', syscall: 'connect' } 但是,当我用不同的客户端(在这种情况下, curl )作出相同的请求: $ […]