2016-11-03 2 views
0

Profile.js Code arbeiten geht, wie untenNode.js von einer anderen Funktion Aufruf nicht

'use strict'; 
var service = require('../services/Profile'); 
class Profile { 
    updateProfile(req, resp) { 
     this.updateUserDetails(req, resp); 
    } 
    updateUserDetails(req, resp){ 
     var admin = req.body; 
     resp.json({"success":true,"message":"User Updated"}); 
    } 
} 
module.exports = new Profile(); 

server.js Code wie unten geht

...... Some code ------- 

var profile = require("./controllers/Profile") 
app.put("/api/profile", auth, profile.updateProfile); 


...... Some code ------- 

Als ich den Anruf <>/api/profile Ich bekomme Fehler

TypeError: Cannot read property 'updateUserDetails' of undefined , 
(at line number of code this.updateUserDetails(req, resp);) 

Da gibt es einige gemeinsame Logik, so muss ich auf eine Funktion verschieben und will t o an anderer Stelle anrufen, aber ich bekomme diesen Fehler. Ich bin neu zu Knoten js auf der Suche nach Hilfe.

+0

Können Sie uns in Ihrem 'server.js' zeigen, wie Sie Ihre Klasse laden? Ich glaube, Sie tun einfach 'const Profil = erfordern ('Profile.js');' –

+0

Ich habe die Frage –

+1

aktualisieren Sie sollten auch die Klasse anstelle einer Instanz der Klasse exportieren. – Paul

Antwort

1

Dies ist ein klassisches Missverständnis, wie this in Javascript funktioniert. Ich würde vorschlagen, dass Sie stackoverflow für den Ausdruck "how this works in javascript" suchen.

Wie für Ihren Code, müssen Sie entweder dies tun:

app.put("/api/profile", auth, function (req,res) { 
    profile.updateProfile(req,res) 
}); 

oder diesen:

app.put("/api/profile", auth, profile.updateProfile.bind(profile)); 
+0

Aber es funktioniert nicht, für jede andere Rückrufe in UpdateProfile, jede Lösung? –

0

ich die Funktion aus der Klasse bewegte und deren Verwendung, es

arbeitete
'use strict'; 
var service = require('../services/Profile'); 
class Profile { 
    updateProfile(req, resp) { 
     updateUserDetails(req, resp); 
    } 
} 
function updateUserDetails(req, resp){ 
     var admin = req.body; 
     resp.json({"success":true,"message":"User Updated"}); 
    } 

module.exports = new Profile(); 
0

ändern Sie Ihren Code zu:

var prof = new Profile(); 
module.exports = prof; 

und verwenden sie dann in dem anderen Verfahren wie folgt aus:

class Profile { 
    updateProfile(req, resp) { 
     prof.updateUserDetails(req, resp); 
    } 

dies sollte gut funktionieren.

Verwandte Themen