Javascript Express.js:API URL和res.json,使用来自npm的请求包

Javascript Express.js:API URL和res.json,使用来自npm的请求包,javascript,json,node.js,api,express,Javascript,Json,Node.js,Api,Express,我绞尽脑汁想弄明白如何让我的API返回一个有效的JSON对象 我目前正在使用以下代码发送响应: res.json({ foo: 'bar', secret: 'code' }); { "code": "ENOTFOUND", "errno": "ENOTFOUND", "syscall": "getaddrinfo", "hostname": <<Redacted>>, "host": <<Redacted>>, "por

我绞尽脑汁想弄明白如何让我的API返回一个有效的JSON对象

我目前正在使用以下代码发送响应:

res.json({ foo: 'bar', secret: 'code' });
{
  "code": "ENOTFOUND",
  "errno": "ENOTFOUND",
  "syscall": "getaddrinfo",
  "hostname": <<Redacted>>,
  "host": <<Redacted>>,
  "port": 443
}
我也尝试过:

res.setHeader('Content-Type', 'application/json');
res.send(JSON.stringify({ foo: 'bar', secret: 'code' }));
当我在浏览器中访问API URL时,上述两种方法都有效。我得到了预期的结果:

{
  "foo": "bar",
  "secret": "code"
}
另一方面,我在解析来自URL的JSON响应时遇到了问题(下面的示例使用了来自
npm
request
包):

使用上述代码,我得到以下错误响应:

res.json({ foo: 'bar', secret: 'code' });
{
  "code": "ENOTFOUND",
  "errno": "ENOTFOUND",
  "syscall": "getaddrinfo",
  "hostname": <<Redacted>>,
  "host": <<Redacted>>,
  "port": 443
}
{
“代码”:“ENOTFOUND”,
“errno”:“ENOTFOUND”,
“系统调用”:“getaddrinfo”,
“主机名”:,
“主持人”:,
“港口”:443
}
我尝试过插入第三方API URL,它们工作得很好(例如:谷歌地图和OpenWeatherAPI),所以我非常确定我正确地使用了
request
。我猜在设置API时我错过了一个步骤(或者我做错了什么)

https://jsonformatter.curiousconcept.com/
,将显示格式化的JSON对象,但无论如何设置响应头和编码,我也会得到以下内容:
错误:编码无效,应为UTF-8、UTF-16或UTF-32。[代码29,结构0]

如有任何建议,将不胜感激

编辑:
上述内容在一个live web应用程序中,而Express在其他情况下工作正常(应用程序中的所有其他内容都工作正常,JSON响应与
请求
或jQuery不匹配。

您可以提供服务器端代码吗?看起来您可能没有使用
服务器。listen()
正如@peteb所指出的,express启动不正确或者调用
请求时出错似乎是个问题。我认为这与格式不正确的JSON无关。在我的app.js中,我有以下内容:
server.listen(process.env.PORT | 3000)
express启动正确(API只是web应用程序的一部分)除请求调用外,所有内容都可以实时运行。导航到API URL也可以。它似乎不适用于任何类型的请求调用。您提供的主机名无法解析。请检查您的URL或DNS配置。正如@jcaron所说,您传递到请求opts中的可能是您的
API-URL
值e> url
值。