Typescript和Node js得到“不是函数错误”
我有一个错误,可能在我的synatx中,我正在创build一个忘记密码function。
我得到的错误是这样的
[TypeError: self._forgotPasswordRouteHelper.sendPasswordResetEmail is not a function]
我的路线如下所示
getRoute(): hapi.IRouteConfiguration { const self = this; return { method: 'POST', path: this._config.apiPrefix + 'forgotpassword', handler: function(request: hapi.Request, reply: hapi.IReply) { let parsedRequest: IForgotPasswordDataRequest = null; let uuid: string; const result = new Promise<string>(function(resolve, reject) { self._validator.validate(request.payload, ForgotPasswordDataRequestValidator) .then(function(validationResult) { if (validationResult.error) { resolve(responseHelper.getErrorResponse(ResponseErrorCode.invalidRequest)); throw null; } parsedRequest = <IForgotPasswordDataRequest> request.payload; return self._forgotPasswordQueries.createEmailResetToken(parsedRequest.email); } , function(error) { console.error(error); resolve(responseHelper.getErrorResponse(ResponseErrorCode.invalidRequest)); throw null; }) .then(function(newUuid: string) { uuid = newUuid; return self._peopleQueries.getPersonByEmail(parsedRequest.email); }) .then(function(person: IPersonModel) { resolve(responseHelper.getSuccessResponse(null, null)); self._forgotPasswordRouteHelper.sendPasswordResetEmail(uuid, parsedRequest.email, person.name_to_call_user); }) .catch(function(error: any) { console.error(error); resolve(responseHelper.getErrorResponse(ResponseErrorCode.unknownError)); }); }); reply(result); } };
而在我的忘记PasswordHelper.ts文件我有这样的function
sendPasswordResetEmail(person: any): Promise<void> { const token = person.forgot_password_token.dataValues.forgot_password_tokens_id; const data: IForgotPasswordEmailEmailData = { 'resetUrl': this._config.websiteUrl + 'reset_password/confirm/' + token, 'emailTo': person.contact_detail.value, 'name': person.person.name_to_call_user } return this._emailHelper.sendPasswordResetEmail(data); }
我不确定我去哪里错了? 这可能是一个语法错误? 当我在postman中发布到这个url时,我得到了运行这个函数所需的所有数据并发送邮件,但是我得到了错误
self._forgotPasswordRouteHelper.sendPasswordResetEmail(uuid, parsedRequest.email, person.name_to_call_user);
尝试这个:
getRoute(): hapi.IRouteConfiguration { const self = this; return { method: 'POST', path: this._config.apiPrefix + 'forgotpassword', handler: function(request: hapi.Request, reply: hapi.IReply) { const me = self; let parsedRequest: IForgotPasswordDataRequest = null; let uuid: string; const result = new Promise<string>(function(resolve, reject) { me._validator.validate(request.payload, ForgotPasswordDataRequestValidator) .then(function(validationResult) { if (validationResult.error) { resolve(responseHelper.getErrorResponse(ResponseErrorCode.invalidRequest)); throw null; } parsedRequest = <IForgotPasswordDataRequest> request.payload; return self._forgotPasswordQueries.createEmailResetToken(parsedRequest.email); } , function(error) { console.error(error); resolve(responseHelper.getErrorResponse(ResponseErrorCode.invalidRequest)); throw null; }) .then(function(newUuid: string) { uuid = newUuid; return me._peopleQueries.getPersonByEmail(parsedRequest.email); }) .then(function(person: IPersonModel) { resolve(responseHelper.getSuccessResponse(null, null)); me._forgotPasswordRouteHelper.sendPasswordResetEmail(uuid, parsedRequest.email, person.name_to_call_user); }) .catch(function(error: any) { console.error(error); resolve(responseHelper.getErrorResponse(ResponseErrorCode.unknownError)); }); }); reply(result); } };
你有嵌套的闭包(这就是为什么我在处理程序中声明了一个新的me
variables,处理程序中的匿名函数与处理程序的范围不同)。 尽量避免这种结构。