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); } }; 

你有嵌套的闭包(这就是为什么我在处理程序中声明了一个新的mevariables,处理程序中的匿名函数与处理程序的范围不同)。 尽量避免这种结构。