web-dev-qa-db-ja.com

NodeJSリクエスト:パイピング時に `response.statusCode`を取得するにはどうすればよいですか?

すみません、私はちょっと迷っています。どうすればconsole.logresponse.statusCode配管するとき?

var express = require('express');
var path = require('path');
var request = require('request');
var fs = require('fs');
var app = express();
var port = 8000;

var destination = fs.createWriteStream('./downloads/google.html');
var url = "http://www.google.com/";
request(url).pipe(destination)
.on("finish", function() {
    console.log("done");
    console.log(response.statusCode); // <<<<<<<<<<<<<<<<<<<<<<<<<<<< this
})
.on("error", function(err){
  console.log(err);
});

app.listen(port, function(){
console.log('running server on ' + port);
});
3
Emilio

responseからrequestイベントをキャッチする必要があります。パイプからのfinishedイベントには含まれません。パイプの前にエラーをキャッチすることも検討する必要があります。これは、ネットワークエラーをキャッチする場所です。パイプの後、ファイルエラーをキャッチします。

request(url)
.on('response', function(response) {
    console.log(response.statusCode) // <--- Here 200
})
.on("error", function(err){
    console.log("Problem reaching URL: ", err);
 })
.pipe(destination)
.on("finish", function(response) {
    console.log("done");
})
.on("error", function(err){
    console.log("Problem writing file: ", err);
});
6
Mark Meyer