我在我的node.js应用程序中使用mongodb几乎所有东西,现在我想创建一个安静的应用程序,所以,我做到了:
我现在正尝试使用get方法:
restApi.js:
var restAPI = {
get: function(method, model, sort, limit, options) {
if (method !== 'get') {
return;
}
model.find(options).sort(sort).limit(3).exec(function (error, result) {
if (error) {
return error;
} else {
return result;
}
});
},
};
现在我可以在我的路线中要求这个:
var restApi = require('restApi');
并使用如下:
app.get('/', function(req, res, next) {
var result = restAPI.get('get', Event, 'date', 3, {'isActive': true});
res.render('/', {
result: result
});
});
不工作,结果未定义。为什么?
如何使用回调在异步函数中转换它?这可能吗?
谢谢! :)
答案 0 :(得分:0)
您没有从restApi.get
返回任何内容。如果你正在使用猫鼬,你可以很容易地返回一个Promise:
var restAPI = {
get: function(method, model, sort, limit, options) {
if (method !== 'get') {
return;
}
return model.find(options).sort(sort).limit(3).exec();
},
};
然后你可以像这样使用它:
app.get('/', function(req, res, next) {
restAPI.get('get', Event, 'date', 3, {'isActive': true}).then( function ( result ) {
res.render('/', {
result: result
});
}).catch( error ) {
// Render error page and log error
});
});
答案 1 :(得分:0)
这是因为你的模型是异步的。你必须通过回调。
使用异步方式更好,因为它在等待响应时不会阻止您的应用程序。
案例示例:
restApi.js:
var restAPI = {
get: function(method, model, sort, limit, options, cb) {
if (method !== 'get') {
return cb("Method must be GET");
}
model.find(options).sort(sort).limit(3).exec(function (error, result) {
if (error) {
return cb(error);
} else {
return cb(null, result);
}
});
},
};
现在我可以在我的路线中要求这个:
var restApi = require(' restApi');
并使用如下:
app.get('/', function(req, res, next) {
restAPI.get('get', Event, 'date', 3, {'isActive': true}, function(err, result){
if(err)
return res.render("Error:" + err)
res.render('/', {
result: result
});
});
});
我已将 cb 参数添加到您的REST API函数中,以便在完成模型异步操作时调用它。
路由器处理程序传递它的回调并在操作完成时打印输出。