私のモデルから、MySQLデータベースの記事をユーザ用に取り出します。nodejs-コントローラの機能に結果を返すことができません
モデル
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);
});
});
});
}
これが働いていると機能が必要な結果をフェッチします。しかし、結果をコントローラ関数に返すわけではありません(私はそれを返していますが、コントローラ関数で結果を取り出すことはできません)。
私がconsole.log(result)
をしたとき、これは私が得たものです。
[ RowDataPacket {
status: 'New',
article_code: 13362,
created_date: 2017-10-22T00:30:00.000Z,
type: 'ebook'} ]
私のコントローラ機能は、次のようになります。
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でかなり新しいです。ありがとう!
私はプロジェクトの要件に従ってトランザクションが必要です。あなたのコードは動作しますが、あなたが与えたコードを使っている間にどこでcommit()を行うべきか教えていただけますか? @Mihai Potra – Annabelle
通常は、 'result'で' callback'を呼び出すのではなく、最後のブランチで 'commit()'を使用します: } else { //成功を問い合わせます。 。 connection.commit(機能(ERR){ 場合(ERR){// 私たちは失敗したが、あまりにもコミットするためにロールバックする必要があると思います connection.rollback(関数(){ コールバック(ERR); });} else { //コミットも成功しました。 コールバック(null、results); } }); } –