Tag: http

对Node.js不支持HTTP方法的HTTP响应?

一般而言,这对于HTTP更具体,但是我使用Node.js作为我的平台。 在HTTP服务器上处理不被接受的HTTP方法时,最好的办法是什么? 目前,我支持PUT和GET,但不支持POST。 如果发出POST请求,我应该返回一个403还是405?

Node.js将响应对象句柄的句柄传递给subprocess

我有一个http服务器和分叉subprocess。 我希望父级接收请求并使用worker.send传递给分叉进程。 并且工作人员应该能够使用相同的响应对象处理并将响应发送回请求者。 我尝试发送worker.send的第二个参数中的响应对象,但它给出错误This handle type can't be sent var child_process = require('child_process'); var worker = child_process.fork(filename); http.createServer(function (req, res) { worker.send({ 'event': 'start' }, res); // send response object }).listen(4000); 我检查了child_process.js文件,它说如果它不属于某些types,它会抛出错误。 我想知道是否有其他选项可以将响应对象发送给分叉的孩子。 编辑: 好的,这是我发现的,我只是改变了以下 // Instead of // worker.send({ 'event': 'start' }, res); worker.send({ 'event': 'start' }, res.socket); 分叉的进程能够调用write的处理程序。 这是对的吗? 我可以用这种方式吗? 或者在一些等等条件下会有什么暗示?

响应编码与node.js“请求”模块

我正在尝试从BingsearchAPI获取数据,而且由于现有的库似乎基于旧的停用的API,所以我尝试使用request库,这似乎是最常见的库。 我的代码看起来像 var SKEY = "myKey…." , ServiceRootURL = 'https://api.datamarket.azure.com/Bing/Search/v1/Composite'; function getBingData(query, top, skip, cb) { var params = { Sources: "'web'", Query: "'"+query+"'", '$format': "JSON", '$top': top, '$skip': skip }, req = request.get(ServiceRootURL).auth(SKEY, SKEY, false).qs(params); request(req, cb) } getBingData("bookline.hu", 50, 0, someCallbackWhichParsesTheBody) Bing返回一些JSON,我可以使用它, 但如果响应正文包含大量的非ASCII字符JSON.parse抱怨该string格式不正确。 我尝试切换到一个ATOM内容types,但没有区别,该XML是无效的。 检查request()callback中提供的响应主体实际上显示错误的代码。 所以我尝试了一些Python代码的相同的请求,似乎一直工作正常。 以供参考: r = requests.get( 'https://api.datamarket.azure.com/Bing/Search/v1/Composite?Sources=%27web%27&Query=%27sexy%20cosplay%20girls%27&$format=json', auth=HTTPBasicAuth(SKEY,SKEY)) stuffWithResponse(r.json()) […]

如何在nodejs中closures请求?

我拥有的: 我使用expression式 框架使用node.js ,并且我正在构build一个可以上传文件的表单,我正在使用node-formidable 。 有什么问题 我的问题是,我无法closures请求,如果我发现上传的文件错误。 我想检查文件types,大小等。所以我可以得到正确的file upload,而文件实际上没有上传,所以我不浪费时间。 所以问题是我无法停止HTTP请求。 我曾经尝试过 这是我迄今为止所尝试的: request.connection.destroy(); response.end('something went wrong…'); 我假设connection.destroy()中止请求,我知道这是因为它触发formidableforms中止事件( form.on('abort', function(){ … }) )但该文件仍在上传,并且该响应没有在file upload之后到达。 那么我应该如何closuresHTTP请求,并将消息发送回客户端呢? 编辑:和其他东西,当我不使用response.end()然后它的作品,除了客户端等待的答案,这很奇怪:\

HTTP保持在node.js中

我正在尝试设置一个HTTP客户端,以使底层连接在node.js中保持打开状态(保持活动状态),但似乎这种行为与文档不符( http://nodejs.org/api/http .html#http_class_http_agent )。 我正在创build一个新的HTTP代理,将maxSockets属性设置为1,并且每秒都请求一个url(例如http://www.twilio.com/ )。 似乎在每个请求的套接字被closures,并创build一个新的套接字。 我已经在Ubuntu 14.04下用node.js 0.10.25和0.10.36testing了这个。 有没有人能够继续工作? 这里是代码: var http = require("http"); var agent = new http.Agent(); agent.maxSockets = 1; var sockets = []; function request(hostname, path, callback) { var options = { hostname: hostname, path: path, agent: agent, headers: {"Connection": "keep-alive"} }; var req = http.get(options, function(res) { res.setEncoding('utf8'); var […]

与Python中的HTTP POST请求不一致的行为

尝试在Python(WSGI)和NodeJS + Express应用程序之间发出POST请求。 他们在不同的服务器上。 问题是,当使用不同的IP地址(即专用networking与公用networking)时,公共networking上的urllib2请求成功,但是对于专用networking的相同请求却失败,出现502 Bad Gateway或URLError [32] Broken pipe 。 我使用的urllib2代码是这样的: req = urllib2.Request(url, "{'some':'data'}", {'Content-Type' : 'application/json; charset=utf-8'}) res = urllib2.urlopen(req) print f.read() 现在,我也使用request来编写这样的requests : r = requests.post(url, headers = {'Content-Type' : 'application/json; charset=utf-8'}, data = "{'some':'data'}") print r.text 得到一个200 OK回应。 这种替代方法适用于这两个networking。 我有兴趣了解是否有一些额外的configuration需要我不知道的urllib2请求,或者如果我需要查看一些可能会丢失的networkingconfiguration(我不相信这是事实,因为替代请求方法起作用,但我肯定是错的)。 任何build议或指针与此将不胜感激。 谢谢!

故障排除错误:在nodejsstream冒险教程中连接ECONNREFUSED

我一直在学习learnyoujs和stream冒险的教程: https://github.com/substack/stream-adventure https://github.com/rvagg/learnyounode#learn-you-the-nodejs-for-much-win 我已经完成了第一套,大部分都是通过第二套的,但是我总是得到一个奇怪的错误…通常我可以让它消失。 这是命令/错误: DEV / javascript / streamAdventure»stream冒险运行httpserver.js stream.js:94 throw er; // Unhandled stream error in pipe. ^ Error: connect ECONNREFUSED at errnoException (net.js:901:11) at Object.afterConnect [as oncomplete] (net.js:892:19) 这将启动但不杀死节点的过程,所以我ps aux | grep节点,然后find进程并杀死它。 以下是教程中的“工作”代码: var http = require('http'); var through = require('through'); var server = http.createServer(function (req, res) { if (req.method === 'POST') […]

从IncomingMessage获取url和正文?

我对节点非常陌生。 我在我有一个简单的服务器,应该只是打印请求查询和它所需要的身体要点。 我所理解的是,“处理请求”函数实际上不返回请求对象 ,而是一个IncomingMessage对象。 有两件事我不明白:如何获取查询string和正文 。 我得到的path,没有查询和身体未定义。 服务器代码: var http = require('http'); var server = http.createServer(function (request, response) { console.log("Request query " + request.url); console.log("Request body " + request.body); response.writeHead(200, {"Content-Type": "text/plain"}); response.end("<h1>Hello world!</h1>"); }); server.listen(8000); console.log("Server running at http://127.0.0.1:8000/"); 请求代码: var http = require('http'); var options = { host: '127.0.0.1', port: 8000, path: '/', […]

如何正确closuresNode.js TCP服务器?

我无法在Google或SO上find明确的答案。 我知道一个net.Server实例有一个close方法,不允许更多的客户端。但它不会断开已经连接的客户端。 我怎样才能做到这一点? 我知道如何用Http来完成这个工作,我猜我是问Tcp是否一样,或者是不一样。 用Http,我会做这样的事情: var http = require("http"); var clients = []; var server = http.createServer(function(request, response) { response.writeHead(200, {"Content-Type": "text/plain"}); response.end("You sent a request."); }); server.on("connection", function(socket) { socket.write("You connected."); clients.push(socket); }); // .. later when I want to close server.close(); clients.forEach(function(client) { client.destroy(); }); Tcp是一样的吗? 还是我应该做不同的事情?

客户端在Node.js上的ssl授权

我正在尝试使用自签名进行客户端授权。 首先,我正在创build证书: CA证书 openssl genrsa -des3 -out ca.key 2048 openssl req -new -x509 -days 365 -key ca.key -out ca.crt 服务器证书 openssl genrsa -out server.key 1024 openssl req -new -key server.key -out server.csr openssl x509 -req -in server.csr -out server.crt -CA ca.crt -CAkey ca.key -CAcreateserial -days 365 客户证书 openssl genrsa -out client.key 1024 openssl req -new […]