Articles of httpresponse

停止在nodejs请求中下载数据

我们如何能够停止服务器的剩余响应 – 例如。 http.get(requestOptions, function(response){ //Log the file size; console.log('File Size:', response.headers['content-length']); // Some code to download the remaining part of the response? }).on('error', onError); 我只想logging文件大小,而不是浪费我的带宽下载剩余的文件。 nodejs是否自动处理这个问题,还是我必须为它编写一些特殊的代码?

Express 4.14 – 如何使用自定义消息发送200状态?

我怎样才能发送快递4.14状态和消息? 为:res.sendStatus(200); 我的浏览器正常,但我希望它显示一个自定义的消息,如: 成功1 res.sendStatus(200); res.send('Success 1'); 错误: 错误:发送后无法设置标题。 如果我这样做: res.status(200).send(1); 错误: expression不赞成的res.send(状态):改为使用res.sendStatus(status) 有任何想法吗?

在Nodejs中读取原始http消息

我使用http.request函数发送一个http请求,我想读取整个http响应,如文本; 也就是原始的http协议文本。 可能吗? 我写了下面的代码,但它不工作。 // Set up the request console.log('Sending request'); var post_req = http.request(post_options, function(res) { res.setEncoding('utf8'); console.log('Response statusCode: ' + res.statusCode); // res.on('data', function (chunk) { // console.log('Response: ' + chunk); // }); // res.on('end', function() {}); }); post_req.on('socket', function (socket) { var response = ""; socket.on('data', function(chunk){ console.log(chunk); }); }); // post […]

在Express.js中为什么res.json()之后的代码仍然执行?

在使用Express的Node中,我有一段这样的代码。 if (req.body.var1 >= req.body.var2){ res.json({success: false, message: "End time must be AFTER start time"}); console.log('Hi') } console.log('Hi2') //other codes 我期望,如果var1> = var2,响应将被发送,执行将结束。 像Java / C#中的return语句一样 但是,显然不是这样的。 响应发送后,“Hi”和“Hi2”以及之后的所有其他代码继续执行。 我想知道如何阻止这种情况发生? 另外,我想知道在什么情况下,你真的希望代码在已经发送响应之后继续执行。 干杯

节点stream导致大量内存占用或泄漏

我正在使用节点v0.12.7,并希望直接从数据库stream到客户端(用于文件下载)。 不过,使用stream时,我注意到了大量的内存占用(可能会发生内存泄漏)。 使用express,我创build了一个端点,只需将可读stream传递给响应,如下所示: app.post('/query/stream', function(req, res) { res.setHeader('Content-Type', 'application/octet-stream'); res.setHeader('Content-Disposition', 'attachment; filename="blah.txt"'); //…retrieve stream from somewhere… // stream is a readable stream in object mode stream .pipe(json_to_csv_transform_stream) // I've removed this and see the same behavior .pipe(res); }); 在生产中,可读stream从数据库中检索数据。 数据量非常大(1M +行)。 我用一个虚拟stream(见下面的代码)换出了这个可读stream,以简化debugging,并注意到相同的行为:我的内存使用量每次跳跃大约200M。 有时候,垃圾收集器会启动,内存会下降一点,但会线性上升,直到我的服务器内存不足。 我开始使用stream的原因是不必将大量的数据加载到内存中。 这是行为吗? 我还注意到,在stream式传输的时候,我的CPU使用率跳跃到了100%,块(这意味着其他请求无法处理)。 我用这个不正确? 虚拟可读stream代码 // Setup a custom readable var Readable […]