我有一个通用的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()
});
答案 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
对象检索路径并相应地传递数据。我不会尝试编码,因为我不知道它在对象中的实际位置。