我想知道如何让我的API返回有效的JSON对象。
我目前正在使用以下代码发送回复:
res.json({ foo: 'bar', secret: 'code' });
我也尝试过:
res.setHeader('Content-Type', 'application/json');
res.send(JSON.stringify({ foo: 'bar', secret: 'code' }));
当我在浏览器中访问API URL时,上述两种方法都有效。我得到了预期的结果:
{
"foo": "bar",
"secret": "code"
}
另一方面,我在从URL解析JSON响应时遇到问题(以下示例使用request
中的npm
包):
request({
url: API-URL,
json: true
}, function (error, response, body) {
if (!error) {
console.log(body);
} else {
console.log(error);
}
})
使用上面的代码,我得到以下错误响应:
{
"code": "ENOTFOUND",
"errno": "ENOTFOUND",
"syscall": "getaddrinfo",
"hostname": <<Redacted>>,
"host": <<Redacted>>,
"port": 443
}
我已尝试插入第三方API网址并且工作正常(例如:Google地图和OpenWeatherAPI),因此我非常确定我使用request
正常。我猜测在设置API时我错过了一个步骤(或者我做错了什么)?
在https://jsonformatter.curiousconcept.com/
中测试我的API网址,格式化的JSON对象会显示,但无论我如何设置响应标头和编码,我都会得到以下内容:
Error: Invalid encoding, expecting UTF-8, UTF-16 or UTF-32.[Code 29, Structure 0]
任何建议都将不胜感激!
编辑:
以上是在一个实时Web应用程序中,Express正常工作(应用程序中的其他所有工作正常,JSON响应只是不能与request
或jQuery很好地协作。