【问题标题】:Class calling own method within method NodeJS/ES6 [duplicate]类在方法NodeJS / ES6中调用自己的方法[重复]
【发布时间】:2017-06-07 19:31:42
【问题描述】:

首先,如果这个问题已经得到解答,我深表歉意;我一直在寻找和寻找,但我没有找到任何东西给了我那个尤里卡!片刻……所以我来了。

我对 Node 和 ES6 很陌生,我希望从我的 app.js 文件中抽象出一些函数/方法。这样做...我创建了一个如下所示的类。

this.tryLogin(email, password)....

总是返回 undefined。

我试过了:

在constructor()var self = this中设置为self.tryLogin()...无济于事

使用function UserHandler() {}.... 和原型进行了实验。

我的目标是创建一个 JS“类”,让我能够在该类的内部和外部调用它自己的方法。

    class UserHandler {

    constructor() {
        this.aws_config = require("./aws-config");
    }

    redirectIfLoggedIn(request, response, next) {

        if (request.session.user && request.session.user.id_token) {

            if (request.query.redirect) {
                response.redirect(request.query.redirect);
            }
            else {
                response.redirect("/profile");
            }
        }
        else {
            next();
        }
    }

    handleLogin(request, response, next) {
        let form_data = request.body;
        let email = request.body.email;
        let password = request.body.password;
        let remember_me = request.body.remember_me;

        this.tryLogin(email, password).then(function () {

        }).catch(function(){

        });
    }

    tryLogin(username, password) {
        return new Promise(function(resolve, reject) {

        });
    }
    // Test function
    pingPromise(string) {
        return new Promise(function(resolve , reject) {
            if (string == "ping") {
                resolve("pong");
            }
            else {
                reject(Error("You must send 'ping'!"));
            }
        });
    }
}


module.exports = new UserHandler();

编辑:

我正在尝试解决的错误TypeError: Cannot read property 'tryLogin' of undefined

我最初是通过 ExpressJS 调用 handleLogin 函数作为中间件:

app.post(default_data.login_form_action, UserHandler.handleLogin, function (request, response) {});

【问题讨论】:

  • 看起来还不错。 this 代码到底有什么问题,你得到什么错误?您如何/在哪里从外部调用方法?
  • 嘿@Bergi,这是我收到的错误TypeError: Cannot read property 'tryLogin' of undefined。在我的 app.js 中,我正在调用这样的函数(使用 expressJS) app.post(default_data.login_form_action, UserHandler.handleLogin, function (request, response) {);
  • 是的,正如怀疑的那样。这与您如何称呼tryLogin 无关,而是关于如何称呼handleLogin。您需要将其绑定到您的用户处理程序实例。 app.post(default_data.login_form_action, (req, res, next) => myUserHandler.handleLogin(req, res, next), function (request, response) {
  • 谢谢@Bergi 看来确实做到了,但我仍然不是 100% 为什么......我有点明白,但我很快就迷失了范围和这些“箭头”功能。

标签: javascript node.js inheritance es6-class


【解决方案1】:

我认为你应该返回调用this.tryLogin()的结果:

handleLogin(request, response, next) {
    let form_data = request.body;
    let email = request.body.email;
    let password = request.body.password;
    let remember_me = request.body.remember_me;

    return this.tryLogin(email, password).then(function () {

    }).catch(function(){

    });
}

【讨论】:

  • 返回 Promise 是一个很好的做法,是的,但看起来这是 Promise 链的末端,他将改为调用 next 回调
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-31
  • 2015-09-15
  • 1970-01-01
  • 2018-08-21
  • 2016-07-11
  • 2012-06-25
相关资源
最近更新 更多