gpt4 book ai didi

mysql - nodejs-无法将结果返回给 Controller 函数

转载 作者:行者123 更新时间:2023-11-28 23:08:14 24 4
gpt4 key购买 nike

在我的模型中,我从 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);
});
});
});
}

这是有效的,该函数获取所需的结果。但它没有将结果返回给 Controller 函数(我正在返回它,但我无法在 Controller 函数中获取它。我想,我在这里做错了什么)。

当我执行 console.log(result) 时,这就是我得到的结果。

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

我的 Controller 函数如下所示:

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 方法的回调中抛出错误是没有意义的,因为这些函数是异步的。确保将错误传递给 回调,并停止执行(使用return 语句)

还有一件事,不知道这个的全部要求:我不确定您是否需要事务来仅从数据库中获取数据而不修改它;所以您可以只执行 query() 并跳过使用任何 beginTransaction()rollback()commit() 调用。

关于mysql - nodejs-无法将结果返回给 Controller 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46602297/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com