为什么我会从这个http请求中得到空的响应

我正在处理我的第一个node.js脚本,它只是向https://www.swapi.co/api/people/?search=Luke+发送http请求并分析响应数据。

端点如下:

 var options = { host: 'www.swapi.co', path: `/api/people/?search=`+firstName+'+'+lastName }; 

逻辑是从响应中获取数据并将其parsing为person对象:

 makeRequest(options, function( data, error) { let person = data.results[0]; if (person) { let height = person.height; let response = person.name + " is " + height + " centimeters tall."; callback(null, {"speech": response}); } else { callback(null, {"speech": "I'm not sure!"}); } }); 

makerequest函数的定义如下:

 function makeRequest(options, callback) { var request = http.request(options, function(response) { var responseString = ''; response.on('data', function(data) { responseString += data; }); response.on('end', function() { console.log('end: $$$' + responseString + '$$$'); var responseJSON = JSON.parse(responseString); callback(responseJSON, null); }); }); request.end(); } 

当我运行脚本时,我得到了有关parsingJSON的错误。

 Unexpected end of JSON input at Object.parse (native) at IncomingMessage.<anonymous> (/var/task/index.js:42:37) at emitNone (events.js:91:20) at IncomingMessage.emit (events.js:185:7) at endReadableNT (_stream_readable.js:974:12) at _combinedTickCallback (internal/process/next_tick.js:80:11) at process._tickDomainCallback (internal/process/next_tick.js:128:9) 

我使用Postmantesting了端点,得到以下JSON作为响应:

 { "count": 1, "next": null, "previous": null, "results": [ { "name": "Luke Skywalker", "height": "172", "mass": "77", "hair_color": "blond", "skin_color": "fair", "eye_color": "blue", "birth_year": "19BBY", "gender": "male", "homeworld": "https://www.swapi.co/api/planets/1/", "films": [ "https://www.swapi.co/api/films/2/", "https://www.swapi.co/api/films/6/", "https://www.swapi.co/api/films/3/", "https://www.swapi.co/api/films/1/", "https://www.swapi.co/api/films/7/" ], "species": [ "https://www.swapi.co/api/species/1/" ], "vehicles": [ "https://www.swapi.co/api/vehicles/14/", "https://www.swapi.co/api/vehicles/30/" ], "starships": [ "https://www.swapi.co/api/starships/12/", "https://www.swapi.co/api/starships/22/" ], "created": "2014-12-09T13:50:51.644000Z", "edited": "2014-12-20T21:17:56.891000Z", "url": "https://www.swapi.co/api/people/1/" } ] } 

但是,当我debugging我的代码时,响应数据是一个空string。 这解释了JSON错误。

我的http请求有什么问题? 为什么我没有得到正确的答复?

看来您所定位的API仅支持SSL,但Node的HTTP库仅支持纯文本请求。 尝试使用他们的HTTPS库。

 var https = require('https'); var request = https.request(options, ...); 

您正在使用的URL默认返回HTML。

相反,你需要打电话: https : //www.swapi.co/api/people/?format=json&search=Luke+

(注意format=json参数)