使用 NodeJS 和 KnexJS 的同步 MySQL 查询
Synchronous MySQL query with NodeJS and KnexJS
我是 NodeJs 的新手,所以我坚持使用它的异步行为,特别是查询基于 KnexJS 模块的 MySQL 数据库
这是带有查询的函数:
var getNotes = function(owner) {
if(owner !== undefined) {
knex.table('tblnotes').where('public',1).orWhere({ownerName : owner}).select('noteId').then(function(result) {
console.log(result);
return result;
});
}
else {
knex.table('tblnotes').where('public',1).select('noteId').then(function(result) {
console.log(result);
return result;
});
}
}
但是当我使用它的时候
var query = getNotes(user.username);
console.log("authenticated");
console.log(query);
console.log("--------------------------------------");
return res.render('authindex.ejs', {title : "Index", user : user,data : query});
然后我记录我得到的结果:
authenticated
undefined
--------------------------------------
[ { noteId: 1 } ]
解决方案 1:使用回调
var getNotes = function(owner, callback) {
if(owner !== undefined) {
knex.table('tblnotes').where('public',1).orWhere({ownerName : owner}).select('noteId').then(function(result) {
console.log(result);
callback(result);
});
}
else {
knex.table('tblnotes').where('public',1).select('noteId').then(function(result) {
console.log(result);
callback(result);
});
}
}
并在如下路由中使用
getNotes(user.username, function(result){
console.log("authenticated");
console.log(result);
console.log("--------------------------------------");
return res.render('authindex.ejs', {title : "Index", user : user,data : result});
});
解决方案 2:使用 promises
var getNotes = function(owner) {
if(owner !== undefined) {
return knex.table('tblnotes').where('public',1).orWhere({ownerName : owner}).select('noteId');
}
else {
return knex.table('tblnotes').where('public',1).select('noteId');
}
}
并在路由中使用如下:
getNotes(user.username).then(function(result){
console.log("authenticated");
console.log(result);
console.log("--------------------------------------");
return res.render('authindex.ejs', {title : "Index", user : user,data : result});
});
我是 NodeJs 的新手,所以我坚持使用它的异步行为,特别是查询基于 KnexJS 模块的 MySQL 数据库
这是带有查询的函数:
var getNotes = function(owner) {
if(owner !== undefined) {
knex.table('tblnotes').where('public',1).orWhere({ownerName : owner}).select('noteId').then(function(result) {
console.log(result);
return result;
});
}
else {
knex.table('tblnotes').where('public',1).select('noteId').then(function(result) {
console.log(result);
return result;
});
}
}
但是当我使用它的时候
var query = getNotes(user.username);
console.log("authenticated");
console.log(query);
console.log("--------------------------------------");
return res.render('authindex.ejs', {title : "Index", user : user,data : query});
然后我记录我得到的结果:
authenticated
undefined
--------------------------------------
[ { noteId: 1 } ]
解决方案 1:使用回调
var getNotes = function(owner, callback) {
if(owner !== undefined) {
knex.table('tblnotes').where('public',1).orWhere({ownerName : owner}).select('noteId').then(function(result) {
console.log(result);
callback(result);
});
}
else {
knex.table('tblnotes').where('public',1).select('noteId').then(function(result) {
console.log(result);
callback(result);
});
}
}
并在如下路由中使用
getNotes(user.username, function(result){
console.log("authenticated");
console.log(result);
console.log("--------------------------------------");
return res.render('authindex.ejs', {title : "Index", user : user,data : result});
});
解决方案 2:使用 promises
var getNotes = function(owner) {
if(owner !== undefined) {
return knex.table('tblnotes').where('public',1).orWhere({ownerName : owner}).select('noteId');
}
else {
return knex.table('tblnotes').where('public',1).select('noteId');
}
}
并在路由中使用如下:
getNotes(user.username).then(function(result){
console.log("authenticated");
console.log(result);
console.log("--------------------------------------");
return res.render('authindex.ejs', {title : "Index", user : user,data : result});
});