在使用Ajax调用时,我试图从后端获取数据
componentDidMount: function () {
$.ajax({
url: 'http://127.0.0.1:3000/ap/test',
dataType: 'json',
success: function (data) {
this.setState(data);
}.bind(this), error: function (xhr, status, err) {
// console.error(this.props.url, status, err.toString());
console.error('failed to view user');
}.bind(this)
});
这是我在node.js中的Get调用
app.get('/test', function(req, res) { DBs.find({},function(err,data){
if(err){ throw err;}
else {
console.log('GET API CALLED, Data Sent!');
} sendingData = data;}); res.send(sendingData); });
1)调用API但未发送响应。(' GET API已调用,数据已发送!')
2)成功函数没有在Ajax调用中运行导致错误:'无法查看用户'
答案 0 :(得分:1)
您的DBs.find()
来电将是asynchronous
,因此您需要从DBs.find
的回调函数发送数据
app.get('/test', function(req, res) {
DBs.find({}, function(err, data) {
if (err) {
throw err;
} else {
console.log('GET API CALLED, Data Sent!');
res.send(data);
}
});
});
答案 1 :(得分:0)
@ShubhamKhatri说对res.send
的调用应该在回调函数中,因此它在数据库查找结果已知后运行。
但还有另一个错误:您在发送之前忘记将结果转换为JSON字符串。然后res.send
需要一个字符串(或者一个缓冲区),所以我想它只发送data.toString()
,这将是[object Object]
或类似的东西。由于您使用了dataType: 'json'
,因此jQuery尝试将其作为JSON字符串读取。但它不是有效的JSON,因此调用错误函数。
要解决此问题,请致电JSON.stringify
:
app.get('/test', function(req, res) {
DBs.find({}, function(err, data) {
if (err) {
throw err;
// BTW you might want less drastic error handling in this case. I'd say just send an HTTP 500 response and log something.
} else {
console.log('GET API CALLED, Data Sent!');
res.send(JSON.stringify(data));
}
});
});