【发布时间】:2016-01-28 17:06:59
【问题描述】:
我试图将一个对象从控制器传递到视图。因为我想让我的模型将我的查询与控制器分开,所以我正在加载一个 JS 对象(模型)。
我的模型如下:
function MyDatabase(req) {
this._request = req;
this._connection = null;
this.init();
};
MyDatabase.prototype = {
init: function() {
this._request.getConnection( function(err, con) {
if(err) return false;
return this._connection = con;
}.bind(this));
},
getFromTable: function(table) {
this._connection.query('SELECT * FROM '+ table +';', function(err, result) {
if(err)
return false;
else if( !result )
return {error: 'Error bij het ophalen van foto\'s'};
else
return result;
}.bind(this));
}
};
module.exports = MyDatabase;
但我不知道如何等到这个查询在我的控制器中完成。我找到了async 模块并尝试了瀑布和并行等多种功能,但它们都不适合我(或者我没有按预期使用它)。
我的控制器目前如下所示:
var myDatabase = require('../dbmodel');
router.get('/', function(req, res, next) {
var db = new myDatabase(req);
async.waterfall([
function(callback) {
var db = new myDatabase(req);
var photos = db.getFromTable('photos');
callback(null, photos);
}
], function(p) {
res.locals.photos = p;
res.render('photos');
} );
});
我做错了什么?我确实了解 NodeJS 是异步工作的,并且不会等待任何功能完成。但必须有办法做到这一点。我做错了什么,或者我误解了什么?
提前致谢! ;)
【问题讨论】:
标签: javascript mysql node.js express asynchronous