loopback远程方法返回除请求数据之外的变量

时间:2017-02-13 14:53:14

标签: node.js loopback

我有一个通用的SendMail路由,我想创建多个远程方法来处理多个请求模板。有关如何将远程方法中的Email_Type返回到基本路由的任何想法。我知道我可以在其中添加默认代码,但想要更优雅的解决方案。

Mail.genericSendMail = function genericEmail(response, callback) {
  console.log(response);
  let templateId=0;

  //PROBLEM: HOW TO KNOW WHICH REMOTE WAS USED

   switch (response.emailType) {
     case "Template-1":
         templateId= 1234;
         break;
      case "Template-2":
         tempalteId = 456;
        break;
      default:
         templateId = 789l
      } //switch

      console.log(templateId);
};



//Want multiple routes like this to support various templates
    Mail.remoteMethod("genericEmail", {
      http: {
        path: "/emailTemplate1",  
        verb: "POST"
      },
       accepts [
         {arg: "request", type:"object",http: {source:"body"},
         default: {firstName:"", lastName:"",emailAddress:""}
      }],
      returns: RESTResponseStatic.loopbackAdapterCommonRestResponseDefinition() 

    });


//Want multiple routes like this to support various templates
Mail.remoteMethod("genericEmail", {
  http: {
    path: "/emailTemplate2",  
    verb: "POST"
  },
   accepts [
     {arg: "request", type:"object",http: {source:"body"},
     default: {emailAddress:"", promoCode:""}
  }],
  returns: RESTResponseStatic.loopbackAdapterCommonRestResponseDefinition() 

});

1 个答案:

答案 0 :(得分:0)

有几种不同的方法可以做到这一点。由于它恰好是一个POST请求,我通常会使用before remote hook将数据附加到正文。

假设您有一个登录用户的模型方法。 假设我们有一个多realm平台,所以我们需要知道我们登录的平台。如果您不使用领域或者不知道它们是什么,请不要担心。这只是向您展示如何将数据填充到模型方法。

User.login = function(data, cb) {
  if (data.realm == 'platform1) {
    return logUserIntoPlatform1(data, cb);  
  }

  return logUserIntoDefaultPlatform(data, cb);
}

现在让我们假设您不希望客户端/前端发送realm而您不想在模型中查找realm 。我们可以像这样添加一个beforeRemote钩子:

User.beforeRemote('login', function (context, user, next) {
  context.args.data.realm = lookUpRealmSync(context); // 1
  next();
});

这将在login方法之前调用。请注意next()调用:这是在实际访问模型方法之前执行错误检测的方法。像next({ status: 422, message: 'Parameter missing: password });之类的东西会返回错误而不会执行User.login方法。 您可能需要仔细查看您的上下文对象(即标有1的行可能与我为您显示的完全不同)。

如果你想了解更多有关这些内容的信息,我的LoopBack docs非常好。它似乎已经更新,因为我上次使用它们所以我无法将您链接到更有用的页面。我找到了远程方法文档here

编辑:我仔细研究了你的问题。您应该能够从context对象检索路径并相应地传递数据。我不会尝试编码,因为我不知道它在对象中的实际位置。