【发布时间】: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