在自定义模型strongloop中编写应用程序逻辑

时间:2016-01-05 14:10:58

标签: strongloop

您好我是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'}
}
);  

所以这是写作的地方还是我必须把它写在其他地方?

1 个答案:

答案 0 :(得分:1)

您的代码有几个问题,但答案肯定是肯定的。

您应该在应用程序逻辑完成时调用回调函数cb,而不是之前。此外,您应该注意将任何错误提供给cb,否则您将面临一些重大调试问题。

此外,您需要特别注意调用回调的方式。在您当前的代码中,cb将在createOrderfindById的最后为任何请求调用两次。这不好,因为对于一个请求,您告诉服务器您已完成两个。此外,在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'}
}
);