您好我是strongloop的新手我想知道我可以在自定义模型中编写我的应用程序逻辑。就像下面的示例一样,我从订单表中获取数据,并且在成功时我想在我的逻辑中使用它的响应。
Orders.createOrder = function(cb) {
Orders.findById( userId, function (err, instance) {
response = "Name of coffee shop is " + instance.name;
cb(null, response);
/***** want to write my logic here *****/
console.log(response);
});
cb(null, response);
};
Orders.remoteMethod(
'createOrder',
{
http: {path: '/createOrder', verb: 'get'},
returns: {arg: 'status', type: 'string'}
}
);
所以这是写作的地方还是我必须把它写在其他地方?
答案 0 :(得分:1)
您的代码有几个问题,但答案肯定是肯定的。
您应该在应用程序逻辑完成时调用回调函数cb
,而不是之前。此外,您应该注意将任何错误提供给cb
,否则您将面临一些重大调试问题。
此外,您需要特别注意调用回调的方式。在您当前的代码中,cb
将在createOrder
和findById
的最后为任何请求调用两次。这不好,因为对于一个请求,您告诉服务器您已完成两个。此外,在createOrder
完成之前,会立即调用findById
末尾的回调。
如此纠正的代码看起来像这样
Orders.createOrder = function(cb) {
Orders.findById( userId, function (err, instance) {
// Don't forget stop execution and feed errors to callback if needed
// (other option : if errors are part of normal flow, process them and continue of course)
if (err) return cb(err);
response = "Name of coffee shop is " + instance.name;
console.log(response);
// Application logic goes there
// Complete the remote method
cb(null, response);
});
// No calls here to the callback
};
Orders.remoteMethod(
'createOrder',
{
http: {path: '/createOrder', verb: 'get'},
returns: {arg: 'status', type: 'string'}
}
);