尝试使用节点js从名为 post 的表中检索所有数据库记录,但问题是只检索了一条记录而不是全部记录。
在php中,我可以使用 while()
循环遍历数据库记录以获取所有数据。
目前,我不知道如何整齐地遍历nodejs中的数据库以获取数据库中的所有记录。一些Stackoverflow学者建议使用await / async方法,但我不知道要在下面的代码上实现它以使其工作。有人可以帮我解决问题。
var connection = require('./config');
module.exports.getpost = function (req, res) {
connection.query('SELECT * FROM posts', function (error, results, fields) {
if (error) {
console.log('error');
res.json({
status : false,
message : 'there are some error with the query'
});
} else {
var postid = results[0].id;
var title = results[0].title;
var content = results[0].content;
var type = -1;
console.log(title);
// Checking user status
connection.query('SELECT count(*) as cntStatus,type FROM like_table WHERE userid= ? and postid=?', [userid,postid], function (error, results, fields) {
if (error) {
console.log('error');
res.json({
status : false,
message : 'there are some error with the query'
});
} else {
var total_count = results[0].cntStatus;
if(total_count > 0){
type = results[0].type;
}
var total_count = results[0].cntStatus;
var result = {
"id" : postid,
"title" : title,
"content" : content,
"type" : type,
"likes" : total_count
};
console.log('query okay');
res.json({
//data:results,
data : result
});
}
});
}
});
}
答案 0 :(得分:0)
我假设你正在使用mysql npm。在那种情况下,我不确定你的问题是什么问题。结果param是select语句返回的行数组。因此,您可以使用循环来遍历所有行。
您实际上不需要使用async / await(在功能方面没有任何优势,但看起来更干净)。但是如果你想摆脱回调,你需要将连接查询包装成一个promise或者使用带有promise接口的mysql2 npm。以下是使用async / await而不是回调来迭代select中所有行的方法:
var connection = require('./config');
module.exports.getpost = async function (req, res) {
try {
const queryResult = await query('SELECT * FROM posts');
queryResult.forEach(row => {
console.log(row.title);
})
} catch (err) {
console.log('error');
res.json({
status: false,
message: 'there are some error with the query'
});
}
}
请注意,您需要使用nodejs 8来运行带有async / await的代码。
此外,您不需要在帖子查询中进行其他查询,您可以使用SQL连接合并这两个
答案 1 :(得分:0)
async waterfall - 运行一系列函数,每个函数将结果传递给数组中的下一个。但是,如果任何函数将错误传递给回调,则不执行下一个函数,并立即调用主回调并显示错误。
var connection = require('./config');
var async = require('async');
module.exports.getpost = function (req, res) {
var arrayOfFuncs = [];
var func_1 = function(callback) {
connection.query('SELECT * FROM posts', function (error, results, fields) {
if (error) {
console.log('error');
callback(error, null);
} else {
var toPass = {};
toPass.postid = results[0].id;
toPass.title = results[0].title;
toPass.content = results[0].content;
toPass.type = -1;
callback(null, toPass);
}
})
}
arrayOfFuncs.push(func_1);
var func_2 = function(prevData, callback) {
connection.query('SELECT count(*) as cntStatus,type FROM like_table WHERE userid= ? and postid=?', [userid,prevData.postid], function (error, results, fields) {
if (error) {
console.log('error');
callback(error, null);
} else {
var total_count = results[0].cntStatus;
if(total_count > 0){
type = results[0].type;
}
var total_count = results[0].cntStatus;
var result = {
"id" : postid,
"title" : title,
"content" : content,
"type" : type,
"likes" : total_count
};
console.log('query okay');
callback(null, result);
}
});
}
arrayOfFuncs.push(func_2);
async.waterfall(arrayOfFuncs, function(errString, finalResult) {
if(errString) {
return res.send(errString);
} else {
return res.send(finalResult);
}
});
}