Node.js使用快递的第三方 API 调用



我使用带有node的express.js并且在使用这个免费API中的数据时遇到麻烦https://api.publicapis.org/entries?category=animals&https=true任何反馈都会有所帮助!

此代码输出以下错误消息TypeError: Cannot read property 'body' of undefined

request({
method: 'GET',
host: 'https://api.publicapis.org',
path:  '/entries?category=animals&https=true',
}, function (error, response, body){
const data = response.body;
const apiData = JSON.parse(data)
console.log('Returned: ', apiData)
if(!error && response.statusCode == 200){
res.json(body);
}
else{
console.log("error with api call")
}
})

当我运行您的确切代码时,我在error参数中出现错误。 这就是为什么responsebody都是空的。 您有一个错误。 具体错误如下:

Error: options.uri is a required argument
at Request.init (D:codetesttempnode_modulesrequestrequest.js:231:31)
at new Request (D:codetesttempnode_modulesrequestrequest.js:127:8)
at request (D:codetesttempnode_modulesrequestindex.js:53:10)
at Object.<anonymous> (D:codetesttemptemp.js:3:1)
at Module._compile (internal/modules/cjs/loader.js:956:14)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:995:10)
at Module.load (internal/modules/cjs/loader.js:815:32)
at Function.Module._load (internal/modules/cjs/loader.js:727:14)
at Function.Module.runMain (internal/modules/cjs/loader.js:1047:10)
at internal/main/run_main_module.js:17:11

在尝试使用其他参数并记录任何错误之前,请务必检查错误,这将为您节省大量时间。


如果你改成这个,它对我有用:

const request = require('request');
request({
method: 'GET',
uri: 'https://api.publicapis.org/entries?category=animals&https=true',
}, function (error, response, body){
if (error) {
console.log(error);
return;
}
const data = response.body;
const apiData = JSON.parse(data)
console.log('Returned: ', apiData)
if(response.statusCode == 200){
console.log('success');
}
else{
console.log("error with api call")
}
});

需要注意的几点:

  1. request()库已被弃用。 虽然它将维护一段时间(也许很长一段时间(,但它将不再通过新功能得到增强。 这里有一个仍在积极开发的替代方案列表。 我正在使用got()因为它看起来非常好,简单易用,而且完全基于承诺。

  2. 在尝试使用任何其他参数之前,请始终检查错误并记录它们。 这将为您节省大量的调试时间。

  3. 使用res.json()发送时,您应该向其传递一个 Javascript 对象,而不是尚未转换的 JSON。 既然你已经有了data,这就是我把你的电话改成的。

最新更新