gpt4 book ai didi

javascript - 如何返回对象而不是字符串来响应诺克?

转载 作者:数据小太阳 更新时间:2023-10-29 04:40:25 24 4
gpt4 key购买 nike

当我用 nock stub 请求时它返回 String 结果而不是 Object 即使 'Content-Type': 'application/json':

var response = {
success: true,
statusCode: 200,
body: {
"status": "OK",
"id": "05056b27b82",
}
};

Test.BuildRequest();
Test.SendRequest(done);

nock('https://someapi.com')
// also tried
// .defaultReplyHeaders({
// 'Content-Type': 'application/json',
// 'Accept': 'application/json'
// })

.post('/order')
.reply(200, response.body,
'Content-Type': 'application/json',
'Accept': 'application/json');

检查:

console.log(put.response.body);
console.log(put.response.body.id);

输出:

{"status":"OK","id":"05056b27b82"}
undefined

在代码中,我使用 request 模块返回具有相同数据的 Object。我也尝试了 sinon(对我不起作用)和 fakeweb 但遇到了同样的问题。

我的代码,我正在尝试测试:

var request = require('request');
// ...

request(section.request, function (err, response, body) {
if (err || _.isEmpty(response))
return result(err, curSyndication);

//if (_.isString(body))
// body = JSON.parse(body);

section.response.body = body;
console.log(body.id); // => undefined (if uncomment previous code - 05056b27b82)

_this.handleResponse(section, response, body, result);
});

它在真实请求中返回一个对象。

附言。我可以在我的响应处理程序中添加下一个代码:

if (_.isString(body))
body = JSON.parse(body);

但有些查询返回 xml 字符串,我不对此类更改负责。

假网站:

fakeweb.registerUri({
uri: 'https://someapi.com/order',
body: JSON.stringify({
status: "OK",
id: "05056b27b82",
}),
statusCode: 200,
headers: {
'User-Agent': 'My requestor',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
});
Test.SendRequest(done);

相同的结果。

更新:

我读了几篇文章,它们使用了 JSON 对象,但没有解析它(使用 nock),所以它应该返回 JSON 对象,与请求库的处理方式相同。

最佳答案

您的箭尾配置没有任何问题,但是您没有告诉 request 将响应解析为 JSON。

来自request method文档(强调我):

json - sets body but to JSON representation of value and adds Content-type: application/json header. Additionally, parses the response body as JSON.

The callback argument gets 3 arguments:

  • An error when applicable (usually from http.ClientRequest object)
  • An http.IncomingMessage object
  • The third is the response body (String or Buffer, or JSON object if the json option is supplied)

因此,您需要在 section.request 对象上将 json 属性设置为 true:

var request = require('request');
// ...

section.request.json = true;
request(section.request, function (err, response, body) {
//..
});

关于javascript - 如何返回对象而不是字符串来响应诺克?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27716667/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com