我正在尝试创建自己的远程方法来重置密码。用户只需将电子邮件放在路径中,服务器就会将accessToken作为响应发送。
MyUser.remoteMethod('requestPasswordReset',
{
http: {path: '/reset/:usermail', verb: 'post'},
accepts: [{arg: 'usermail', type: 'string', required: true, http: {source: 'path'}}],
returns: {root: true, type: 'object'},
description: 'Allows Users to request a password reset, returns an error if the specified email does not exist'
}
);
MyUser.requestPasswordReset = function (usermail, next) {
MyUser.resetPassword({email: usermail}, function (err) {
if (err) {
next(err);
}
else {
MyUser.on('resetPasswordRequest', function (info) {
console.log('next will be executed, but crashes the second time');
next(null, info.accessToken.id);
});
}
})
};
我第一次向/reset/:usermail
提出请求时工作完美,但第二次运行请求时应用程序崩溃并出现跟随错误
发送后无法设置标头
我知道在调用更多回调时通常会发生此错误。
如果我给回调的另一个错误参数。例如next('abc')
代替null next(null, info.accessToken.id);
应用程序不会崩溃
答案 0 :(得分:0)
我找到了错误的原因。 MyUser.on('resetPasswordRequest', function (info))
正在成为一名倾听者。因此,每次调用requestPasswordReset
时,都会创建一个新的侦听器。当用户第二次发出请求时,有两个侦听器,他们都发送响应。将MyUser.on('resetPasswordRequest', function (info))
放在js文件的根目录中会丢失问题。