首页 > 解决方案 > 从 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 项目来说是一个相当标准的模式吗?

谢谢

标签: mysqlnode.jsexpress

解决方案


您错误地使用了回调。您可以使用 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


推荐阅读