javascript - Typescript 和 Node js 得到 "Not a Function Error"

标签 javascript node.js types typescript

我的 synatx 可能有一个错误,因为我正在创建一个忘记密码的功能。

我得到的错误是这个

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

在我的 forgotPasswordHelper.ts 文件中,我有一个这样的函数

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 中发布到该网址时,我获得了运行此功能并发送电子邮件所需的所有数据,但我在

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 变量,处理程序中的匿名函数与处理程序的作用域不同)。尽量避免这种结构。

关于javascript - Typescript 和 Node js 得到 "Not a Function Error",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37743177/

相关文章:

javascript - 如何创建下拉复选框控件?

javascript - 在 <td> 中查找文本,然后有条件地更改另一个 <td> 中的文本

javascript - HTML5 Canvas - 将正方形变成圆形

javascript - Node.js、wordpress、redis

node.js - Backbonejs,在 Collections.each 中设置模型属性时出现 "Object #<Object> has no method apply"

javascript - 如何访问我的 Google Play 开发者帐户中的存储桶?

haskell - 是否可以使用迭代增量对键入的 Church 数字实现加法?

haskell - 类型同义词/内部类型参数的类型同义词中的模式匹配

javascript - 如何在 Ecmascript 6 中加载 css 文件

ios - 如何接受多种类型作为函数中的参数?