nodejs-无法将结果返回给控制器function

从我的模型中,我从用户的MySQL数据库中获取一些文章。

模型

var mysql = require('mysql'); var db = mysql.createPool({ host: 'localhost', user: 'sampleUser', password: '', database: 'sampleDB' }); fetchArticles: function (user, callback) { var params = [user.userId]; var query = `SELECT * FROM articles WHERE userId = ? LOCK IN SHARE MODE`; db.getConnection(function (err, connection) { if (err) { throw err; } connection.beginTransaction(function (err) { if (err) { throw err; } return connection.query(query, params, function (err, result) { if (err) { connection.rollback(function () { throw err; }); } //console.log(result); }); }); }); } 

这是工作和function提取所需的结果。 但是它没有返回结果给控制器函数(我正在返回它,但是我不能在控制器函数中获取它,我想我在这里做了一些错误)。

当我做了console.log(result)这是我得到的。

 [ RowDataPacket { status: 'New', article_code: 13362, created_date: 2017-10-22T00:30:00.000Z, type: 'ebook'} ] 

我的控制器function如下所示:

 var Articles = require('../models/Articles'); exports.getArticle = function (req, res) { var articleId = req.body.articleId; var article = { userId: userId }; Articles.fetchArticles(article, function (err, rows) { if (err) { res.json({ success: false, message: 'no data found' }); } else { res.json({ success: true, articles: rows }); } }); }; 

谁能帮我弄清楚我在这里犯了什么错误? 我很新的nodejs。 谢谢!

简单的答案是你不在任何地方调用callback函数。 这里是调整后的代码:

 fetchArticles: function (user, callback) { var params = [user.userId]; var query = `SELECT * FROM articles WHERE userId = ? LOCK IN SHARE MODE`; db.getConnection(function (err, connection) { if (err) { // An error. Ensure `callback` gets called with the error argument. return callback(err); } connection.beginTransaction(function (err) { if (err) { // An error. Ensure `callback` gets called with the error argument. return callback(err); } return connection.query(query, params, function (err, result) { if (err) { // An error. // Rollback connection.rollback(function () { // Once the rollback finished, ensure `callback` gets called // with the error argument. return callback(err); }); } else { // Query success. Call `callback` with results and `null` for error. //console.log(result); return callback(null, result); } }); }); }); } 

connection方法的callback中抛出错误没有意义,因为这些函数是asynchronous的。 确保您将错误传递给callback ,并停止执行(使用return语句)

还有一件事,不知道这个完整的需求:我不确定你需要事务从数据库中获取数据,而不需要修改它; 所以你可以直接执行query()并跳过使用beginTransaction()rollback()commit()调用。