我正在尝试从 mysql 数据库中获取一些数据。
后端似乎工作正常,数据被记录在那里但不是在前端。
app.post('/api/user/database_test', (req, res, next) => {
var result;
database.query('SELECT * FROM test', function (error, response, fields) {
if (error) throw error;
console.log('response:', response);
result = response;
console.log('result: ', result) //works fine
})
res.status(200).json({
message: 'Data from Database :',
result: result
})
});
后台控制台显示:
result: [
RowDataPacket {
userid: '1',
username: 'testuser',
firstname: 'testname',
lasname: 'testname2',
email: '[email protected]',
}
]
但我还需要在前端显示数据,所以我这样尝试了。
async getFromDB() {
var obj = 'test';
this.http.post('http://localhost:3000/api/user/database_test', obj)
.subscribe((response) => {
console.log('response: ', response)
})
}
但是我在浏览器控制台中只收到消息“来自数据库的数据”,但没有收到实际数据。我也尝试记录 response.result 但代码不再编译。
我做错了什么?
问题出在后端代码上:
db.query
是异步的,所以 res.json
在数据库部分完成之前返回结果,所以你在实际拉取之前将空结果返回给客户端。
尝试将响应部分移到
db.query
中,以便 res.json
在 db.query
完成时运行:
app.post('/api/user/database_test', (req, res, next) => {
database.query('SELECT * FROM test', function(error, response, fields) {
if (error) throw error;
console.log('response:', response);
console.log('result: ', response) //works fine
res.status(200).json({
message: 'Data from Database :',
result: response
});
})
});