2017-06-07 7 views
0

Zunächst entschuldige ich mich, wenn dies bereits beantwortet wurde; Ich habe gesucht und gesucht, aber nichts, was ich gefunden habe, hat mir Eureka! Moment ... also ich komme hierher.Klasse Aufruf eigene Methode innerhalb der Methode NodeJS/ES6

Ich bin neu zu Node und ES6 und versuche, einige meiner Funktionen/Methoden aus meiner app.js Datei zu abstrahieren. Tun Sie dies ... Ich habe eine Klasse wie die unten erstellt.

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

Gibt immer undefined zurück.

Ich habe versucht:

in Konstruktor() var self = this und setzen Sie ihn auf self.tryLogin()... ohne Erfolg

experimentierten mit function UserHandler() {}.... und unter Verwendung von Prototypen.

Mein Ziel ist es, eine JS "Klasse" zu erstellen, in der ich die Möglichkeit habe, innerhalb und außerhalb der Klasse eigene Methoden aufzurufen.

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

EDIT:

Fehler I TypeError: Cannot read property 'tryLogin' of undefined

zu lösen versuche ich zunächst nenne die handleLogin Funktion über Express.js als Middleware:

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

Das sieht gut aus. Was genau funktioniert mit * diesem * Code nicht, welchen Fehler bekommst du? Wie/wo * nennst du die Methoden von außen? – Bergi

+0

Hey @Bergi, also hier ist der Fehler, den ich bekomme 'TypeError: Kann Eigenschaft 'tryLogin' von undefined nicht lesen. In meiner app.js rufe ich die Funktion so (mit expressJS) app.post (default_data.login_form_action, UserHandler.handleLogin, Funktion (Anfrage, Antwort) {); – Ray

+1

Ja, wie vermutet. Es geht nicht darum, wie Sie 'tryLogin' aufrufen, es geht um den Aufruf von' handleLogin'. Sie müssen es an Ihre Benutzerhandler-Instanz binden. 'app.post (default_data.login_form_action, (req, res, next) => myUserHandler.handleLogin (req, res, next), funktion (request, response) {' – Bergi

Antwort

0

Ich glaube, Sie sollten das Ergebnis des Aufrufs zurückgeben 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(){ 

    }); 
} 
+0

Das Versprechen zurückzugeben ist eine gute Übung, ja, aber es sieht so aus, als wäre dies das Ende des Versprechens Kette und er wird stattdessen den 'nächsten' Callback aufrufen – Bergi

Verwandte Themen