Tag: http

如何在域error handling程序中发送响应

我有类似的东西: var domain = require ("domain"); var http = require ("http"); var d = domain.create (); d.on ("error", function (error){ console.error (error); //res.writeHead (500) //res.end () }); d.run (function (){ http.createServer (function (req, res){ null.error }).listen (1337, "localhost"); }); 我的所有服务器都在一个域内运行。 如果在请求期间发生错误,我想向用户发送一个500错误,但在error handling程序中,我无法访问响应对象。 我的第一个尝试是为每个请求使用一个明确的域作为文档说: var d = domain.create (); d.on ("error", function (error){ //res.writeHead (500); //res.end […]

在导入到JSON格式的MongoDB之前,清理HTTP响应头中的非法字符

在使用Node.js请求HTTP响应并将其导入到MongoDB时,我注意到一个或两个URL将包含非法字符的标题(因为它们正在使用键),当我尝试导入到MongoDB时,这将导致整个脚本崩溃。 下面是一个例子: { "url": "divensurf.com", "statusCode": 200, "headers": { "x-varnish": "2236710953 2236710300", "vary": "Accept-Encoding,Cookie,X-UA-Device", "cache-control": "max-age=7200, must-revalidate", "x-cache": "V1HIT 2", "content-type": "text/html; charset=UTF-8", "page.ly": "v4.0", "x-pingback": "http://divensurf.com/xmlrpc.php", "date": "Thu, 21 Mar 2013 19:40:59 GMT", "transfer-encoding": "chunked", "via": "1.1 varnish", "connection": "keep-alive", "last-modified": "Thu, 21 Mar 2013 19:40:57 GMT", "age": "2" } } 标题/键"page.ly"会使脚本崩溃,因为它包含非法字符. 。 在将这个文档导入到MongoDB之前,有没有什么方法可以通过删除这些非法字符来清除引用中包含的这个键/头? […]

Node.js Express – 在完成处理整个请求之前提供HTTP响应

我有一个Node.js高速服务器,我发送响应,然后尝试使用相同的请求实例做更多的处理。 如果我在发送头文件之后写入res,我将会得到一个错误 – 但是如果我在发回相应的响应的响应之后使用req可读stream,会发生什么? 换句话说,在完成处理整个请求之前,如何使用Node.server发送HTTP响应? 换句话说,如果我已经发回了一个响应,那么在已经发送响应之后,我怎么能“消费”这个请求 – 除了回复响应之外,这其实只是一个事情吗? 现在,似乎有一些奇怪的错误相关的使用请求对象(stream)对应于已经发送的响应。 让我举一些例子, 以下显示了我的服务器中的最后3个Express中间件处理程序。 作为一个有趣的旁注 – 一旦一个中间件处理程序被请求调用,它不能被调用(看起来如此)。 那么会发生什么呢是当响应被发送时,下面的第一个处理程序被调用。 然后,另一个执行path(使用process.nextTick或setImmediate)调用next(),然后调用第二个处理程序,这意味着我最终得到了一个404在我的服务器上login。 app.use(function (req, res, next) { var r; var timeRequired = (Date.now() – req.request_start) + 'ms'; console.log("Time required for request:", timeRequired); if (r = req.lectalTemp) { if (!req.lectalSent) { req.lectalSent = true; res.status(r.status).json({timeRequired: timeRequired, success: r.data}); } else { console.log('Headers […]

Axios GET请求不起作用

我正在使用:Axios:0.17.1节点:8.0.0 以下标准节点得到正常工作,但Axios版本没有。 任何想法为什么? 节点http: http .get(`${someUrl}`, response => { buildResponse(response).then(results => res.send(results)); }) .on('error', e => { console.error(`Got error: ${e.message}`); }); 爱可信: axios .get(`${someUrl}`) .then(function(response) { buildResponse(response).then(results => res.send(results)); }) .catch(function(error) { handleError(error, res); }); 我只是得到一个503的捕获,“请求失败,状态码503”

如何检测用户取消请求

我正在通过编写一个非常基本的http / webcaching代理尝试Node.js,并击中了我没有设法突破的东西。 假设我有一个非常基本的代理function(侦听请求,将其传送到外部服务器,等待响应,将其传回客户端),如何检测客户端(Web浏览器)何时取消请求? 当用户在他的浏览器上点击“Stop”/ Esc时,浏览器不会向我发送任何“请求”或信息,并且在“响应”连接结束时没有被调用时附加callback。 这是我的意思: http.createServer (clientRequest, clientResponse) { var client = http.createClient (port, hostname); var request = client.request (method, url, headers); request.addListener ('response', function(response){ response.addListener ('data', function(chunk){ // forward data to clientResponse.. } response.addListener ('end', function(){ // end clientResponse.. } }); clientResponse.addListener('end', function(){ // this never gets called 🙁 // I want […]

TCP服务器:删除连接,而不是重置或响应?

在Node.JS中是否有可能以这种方式“删除”连接 客户永远不会收到回应(200,404或其他) 客户端永远不会被通知连接被终止(从来没有收到连接重置或stream结束) 服务器的资源被释放(服务器不应该试图以任何方式维护连接) 我在Solaris上特别询问了关于Node.JS HTTP服务器(它实际上只是复杂的TCP服务器),但是如果在其他操作系统(Windows,Linux)或编程语言(C / C ++,Java)我有兴趣。 我为什么要这个? 惹恼或放慢(可能是单线程)机器人,如phpMyAdmin探针 。 我知道这并不重要,但这些types的问题可以更好地帮助我学习我的程序的边界。 我知道客户端主机很可能重新传输连接的数据包,因为我从来没有发送重置。

带有压缩的Node.JS http服务器 – 发送variables作为响应

对不起模糊的问题..但我不确定问题是什么。 我有一个节点http服务器,我正在使用JSON数据提供给一个Web应用程序。 它工作的很好,但我的JSONstring开始变大(10-12 MB),所以我想用zlib添加压缩。 JSON数据是在一个stringvariables,我想压缩,然后写入响应对象…但返回到客户端的结果似乎总是有完美的标题,没有内容。 这是我的deliverResponse函数: var deliverResult = function (data, response, callback, acceptEncoding){ var payload = callback + '(' + JSON.stringify(data) + ');'; if (acceptEncoding.match(/\bdeflate\b/)) { response.writeHead(200, { 'Content-Encoding': 'deflate', 'Content-Type': 'text/javascript; charset=UTF-8' }); zlib.deflate(payload, function(err, result){ if(!err){ //console.log(result.toString('utf8')); // I have data on the console here response.write(result.toString('utf8')); // No data sent here } […]

nodejs错误:parsingSocket.ondata错误

使用http.request发出客户端请求(node v0.6.18,v0.6.3)时,出现了一些错误,下面的代码会产生错误,并且我有一些问题。 var http = require('http'); var url = require('url'); http.createServer(function(req, res) { var data = '多情自古空余恨'; res.writeHead(200, { 'Content-Type': 'text/plain', 'Content-Length': 1 //ERROR }); res.end(data); }).listen(3000); function request(options, callback) { var req = http.request(options, function(res) { var data = ''; res.setEncoding = 'utf8'; res.on('data', function(chunk) { data += chunk; }); res.on('error', function(err) { callback(new […]

node.js http.get的同步版本

我想写一个testing程序,testing我为课程编写的http服务器。 我需要http.get / http.post的同步版本 我想用一个“test”方法来创build一个对象,如果testing通过了,它将返回true或者false,但是却没有办法让代码等待,直到服务器响应get请求。 任何build议如何做到这一点?

使用Socket.IO的emit()而不是所有的HTTP请求是一个好习惯吗?

我build立了一个Node.js HTTP服务器。 它侦听path“/”,并在获取请求上返回一个空的HTML模板。 该模板包含Require.js客户端脚本,该脚本创build与服务器的Socket.IO连接。 然后,客户端和服务器之间的所有通信都由Web Sockets提供。 连接时,服务器需要authentication; 如果存在authenticationcookie,则客户端将其发送到服务器进行validation,如果没有cookie,则客户端呈现login视图并等待用户input等。 到目前为止,一切正常,validation凭据后,我为用户创build一个SID,并使用它来pipe理他的访问权限。 然后我渲染主视图和应用程序启动。 问题: 是否需要使用HTTPS而不是HTTP,因为我只使用HTTP将脚本发送到客户端? (注:我打算使用本地存储而不是Cookie) 在没有HTTP的情况下使用纯Web套接字是否有什么问题? 如果有效,为什么没有人使用它?