我正在构建一个应用程序,并且遇到了从客户端发出请求,将其发送到我的服务器,让服务器进行API调用然后将结果发送回客户端的问题。我正在使用Node和Request-Promise模块。
以下是客户端代码:
OrderBy()
这成功向服务器发出请求:
$(document).ready(function() {
var artistSearch = () => {
const q = $('.artistName').val();
$.ajax({
type: "POST",
url: "http://localhost:3000/request",
data: {artist: q},
})
.done(function(data) {
console.log('data: ', data)
})
};
$(".artistSearch").submit( () => {
artistSearch();
});
});
});
最终成功地从API调用中获取数据,但从未将其发送回客户端!如果我在我的.then承诺之外做res.send(),我可以在客户端接收数据。
我有什么遗失的吗?提前谢谢!
答案 0 :(得分:0)
试试这个
var options = {
uri: searchURL,
simple: false,
};
rp(options)
.then(function (data) {
console.log(data);
res.status(200).send(data).end();
})
.then(function() {
console.log('complete');
})
.catch(function (err) {
console.log('error')
});
答案 1 :(得分:0)
我认为客户端确实收到了数据,但连接没有正确终止,因为它认为有更多数据。这是因为你没有指定标题,而模块http无法计算出内容长度。
rp(options)
.then(function (data) {
console.log(data);
// res.send(data);
// assume data is JSON.
res.setHeader (200, {'Content-Type': 'application/json',
'Content-Length':data.byteLength});
res.end(data); //Send data immediately.
})
...
如果data是字符串,则需要使用data.length。实际上,如果data是一个字符串,那么默认情况下标题是{'Content-Type': 'application/json', 'Content-Length':data.length}