mysql - 从 JavaScript 类返回 MySql 结果
问题描述
从 Express JS 模型返回结果时遇到问题。我认为我的问题是对回调和 JS 类缺乏了解。我似乎无法让它工作。
我有以下代码。
从 server.js 我有这条路线:
app.get('/api/v1/loralocations/:id', LoraLocation.getOne);
调用下面的控制器操作
getOne(req, res) {
const lora_location = LoraLocationModel.findOne(req.params.id);
if (!lora_location) {
return res.status(404).send({'message': 'LoraLocation not found'});
}
return res.status(200).send(lora_location);
},
.
.
.
模型
var pool = require('./mysqlDb.js');
import moment from 'moment';
class LoraLocation {
/**
* class constructor
* @param {object} data
*/
constructor() {
}
findOne(id) {
var sql = ('SELECT test FROM Test WHERE id = ?');
pool.query(sql, [id], function (err, results, fields) {
if (err) return err;
console.log(results); //works
return results; //nope
});
}
console.log 返回结果,但没有向控制器返回任何内容。我浏览了很多帖子,但似乎找不到解决方案。我想也许我还需要在控制器中进行回调?
这对于一个简单的 API 项目来说是一个相当标准的模式吗?
谢谢
解决方案
您错误地使用了回调。您可以使用 async/await 这是一个不错的选择,或者如果您想坚持使用回调,那么您需要返回回调函数。
控制器
const lora_location = LoraLocationModel.findOne(req.params.id, function (err, data) => {
});
在模型中应该是
findOne(id, cb) {
var sql = ('SELECT test FROM Test WHERE id = ?');
pool.query(sql, [id], function (err, results, fields) {
if (err) cb(err, []);
console.log(results); //works
cb(null, results);
});
}
您可以在此链接中获取有关回调的更多详细信息 https://medium.com/better-programming/callbacks-in-node-js-how-why-when-ac293f0403ca
推荐阅读
- goland - 无法创建代码模板 - 灰显
- kotlin - cinterop 进程以非零退出值 1 结束
- excel - 如何在 Excel 中创建自动更新的图表和公式
- html - 如何将我的图标放在页面中间并将文本放在图标下方?
- javascript - 语法错误,无法识别的表达式:Jquery
- collision-detection - 如何计算胶囊-三角形交点的穿透向量?
- json - 如何读取json元素
- python - 如何在 Ubuntu 16 中将 .py 文件转换为可执行图标?
- python - Python 不能识别两个相等的字符串
- r - ggplot: modify axis labels with named vector after having applied function