簡體   English   中英

Nodejs http請求不起作用

[英]Nodejs http request not working

我有一段代碼應該做一個http get請求。 程序成功退出沒有錯誤,但我沒有看到任何響應,它甚至沒有進入回調函數! 起初我認為這是因為http是異步的並且最后放了一個大循環,但這也不起作用。 有誰知道這個問題? 只打印第一個控制台日志sendHttpRequest和444。 我也嘗試了http.get,但它也沒有用。

function sendHttpRequest (url, callBack) {
    console.log("sendHttpRequest");
    //constrct options
    var options = {
        host: 'www.google.com',
        path: '/index.html',
        method: 'GET',
        headers: {
           'Content-Type': 'application/x-www-form-urlencoded'
        }
    };

    http.get("http://www.google.com/index.html", function(res) {
        console.log("Got response: " + res.statusCode);
    });

    var req = http.request(options, function(res) {
        console.log("333");
        var output = '';
        console.log(options.host + ':' + res.statusCode);
        res.setEncoding('utf8');

        res.on('data', function (chunk) {
            console.log("DATATATAT!")
            output += chunk;
        });

        res.on('end', function () {
            console.log('222');
            var obj = JSON.parse(output);
            callBack(res.statusCode, obj);
        });
    });

    req.on('error', function (err) {
        console.log('error: ' + err.message);
    });

    req.end();
    console.log("444");
    }
}

更新

在OP收到回復之前,grunt任務終止; 添加async和回調任務修復它。


如果我把你的代碼帶到函數之外並加上var http = require('http'); 我得到一個響應直到222 ,此時它死於SyntaxError: Unexpected token < 實際上這是因為你試圖將HTML響應解析為JSON而死亡。

如果您粘貼下面的整個腳本並端到端地運行它,則控制台會死機:

undefined:1
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
^
SyntaxError: Unexpected token <
    at Object.parse (native)
    at IncomingMessage.<anonymous> (/Users/you/nodetest/tmp/test.js:31:28)
    at IncomingMessage.EventEmitter.emit (events.js:120:20)
    at _stream_readable.js:896:16
    at process._tickCallback (node.js:599:11)

劇本:

var http = require('http');

console.log("sendHttpRequest");
//constrct options
var options = {
    host: 'www.google.com',
    path: '/index.html',
    method: 'GET',
    headers: {
       'Content-Type': 'application/x-www-form-urlencoded'
    }
};

http.get("http://www.google.com/index.html", function(res) {
    console.log("Got response: " + res.statusCode);
});

var req = http.request(options, function(res) {
    console.log("333");
    var output = '';
    console.log(options.host + ':' + res.statusCode);
    res.setEncoding('utf8');

    res.on('data', function (chunk) {
        console.log("DATATATAT!")
        output += chunk;
    });

    res.on('end', function () {
        console.log('222');
        // it's failing on the next line, because the output 
        // it's receiving from Google is HTML, not JSON. 
        // If you comment out this line and simply 
        // "console.log(output)" you'll see the HTML response.
        var obj = JSON.parse(output);
        callBack(res.statusCode, obj);
    });
});

req.on('error', function (err) {
    console.log('error: ' + err.message);
});

req.end();
console.log("444");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM