gpt4 book ai didi

node.js - 使用 afterRemote 钩子(Hook)在远程方法上的环回中发送响应

转载 作者:太空宇宙 更新时间:2023-11-04 00:56:39 25 4
gpt4 key购买 nike

我正在尝试处理需要发送邮件的请求。为了在不等待邮件发送的情况下响应请求,我在 afterRemote Hook 上发送邮件。该方法似乎运行正确并且邮件已发送,但由于某种原因,cb 函数未执行,因此客户端上的请求仍未得到答复。问题出在后面的代码上,正如您所看到的,我有 console.log("Here");cb(null,{}); ,并且第一个命令被执行,但第二个命令却没有执行。

  user.joinEntity = function(data, cb) {
var loopbackCtx = user.app.loopback.getCurrentContext();
var userId=loopbackCtx.accessToken.userId;
if(false){
cb( new Error("Cant join that Entity."),{});
}else{
user.find({where:{id:userId}},function(err,applicant_instance){
if (err) cb(err,{});
if(applicant_instance.length>0)
user.find({where:{id:data.ownerId}},function(err,founder_instance){
if (err) cb(err,{});
if(founder_instance.length>0)
user.app.models.EntityApplication.create({email:applicant_instance[0].email,userId:userId,EntityFounder:founder_instance[0].id,Entity:data.id,Status:"pending"},function(err,Entity_Application_Instance){
if (err) cb(err,{});
loopbackCtx.join_entity={applicant:applicant_instance[0].email,entity:data.name,to:founder_instance[0].email};
console.log("Here");
cb(null,{});
});
});
})
}
}
user.afterRemote('joinEntity',function(){
var loopbackCtx = user.app.loopback.getCurrentContext();
user.app.models.Email.send({
to: loopbackCtx.join_entity.to,
from: 'mailer@domain.org',
subject: 'Application to enter your Entity',
// text: '<strong>HTML</strong> tags are not converted'
html: 'User <strong>'+loopbackCtx.join_entity.applicant+'</strong> wants to enter Entity by the name of <strong>'+loopbackCtx.join_entity.entity+'</strong>'
}, function(err) {
if (err) throw err;
console.log('> email sent successfully');
});
});

最佳答案

通常,您需要确保在远程 Hook 上执行 next() 回调,以告诉 LB(或更确切地说 Express)您希望这个特定的中间件允许继续处理。如果您不调用 next() 那么您基本上是在告诉 Express 这是中间件处理的结束。确保您接受远程 Hook 的所有三个参数,然后在方法操作完成时执行 next():

user.afterRemote('joinEntity',function(ctx, instance, next){
// *** notice arguments above!

var loopbackCtx = user.app.loopback.getCurrentContext();
user.app.models.Email.send({
to: loopbackCtx.join_entity.to,
from: 'mailer@domain.org',
subject: 'Application to enter your Entity',
// text: '<strong>HTML</strong> tags are not converted'
html: 'User <strong>'+loopbackCtx.join_entity.applicant+'</strong> wants to enter Entity by the name of <strong>'+loopbackCtx.join_entity.entity+'</strong>'

}, function(err) {
// *** notice the correct way to indicate an error!
if (err) { next(err); }

console.log('> email sent successfully');

// *** Now tell Express to keep processing middleware
next();
});
});

关于node.js - 使用 afterRemote 钩子(Hook)在远程方法上的环回中发送响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29486253/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com