首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >回送远程方法返回请求数据以外的变量

回送远程方法返回请求数据以外的变量
EN

Stack Overflow用户
提问于 2017-02-13 22:53:14
回答 1查看 521关注 0票数 1

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

代码语言:javascript
复制
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() 

});
EN

回答 1

Stack Overflow用户

发布于 2017-02-13 23:24:21

有几种不同的方法可以做到这一点。因为它恰好是一个POST请求,所以我通常会使用一个之前的远程钩子将数据附加到主体。

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

代码语言:javascript
复制
User.login = function(data, cb) {
  if (data.realm == 'platform1) {
    return logUserIntoPlatform1(data, cb);  
  }

  return logUserIntoDefaultPlatform(data, cb);
}

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

代码语言:javascript
复制
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的行可能不会像我为您显示的那样工作)。

如果你想了解更多关于这方面的内容,I LoopBack的docs是非常好的。自从我上次使用它们以来,它们似乎已经更新过了,所以我无法将您链接到更有用的页面。不过,我找到了远程方法文档here

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42206953

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档