2016-11-03 4 views
0

Profile.js код идет нижеNode.js вызова функции из другой функции не работает

'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 код идет ниже

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

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


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

Когда я делаю вызов <>/апи/profile Я получаю ошибку

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

Поскольку существует некоторая общая логика, поэтому мне нужно перейти к некоторой функции и хочу позвонить в другое место, но я получаю эту ошибку. Я новичок в узле js, который ищет помощь.

+0

Можете ли вы показать нам в своем 'server.js', как вы загружаете свой класс? Я предполагаю, что вы просто выполняете 'const profile = require ('Profile.js');' –

+0

У меня есть вопрос об обновлении –

+1

Кроме того, вы должны экспортировать класс, а не экземпляр класса. – Paul

ответ

1

Это классическое непонимание того, как this работает в javascript. Я предлагаю вам искать stackoverflow для фразы "how this works in javascript".

Что касается вашего кода, вам необходимо либо сделать это:

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

или это:

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

Но это не работает, для каких-либо других обратных вызовов внутри updateProfile, любого решения? –

0

я переместил функцию из класса и использовать его, он работал

'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

изменить свой код на:

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

, а затем использовать его в другом методе, как это:

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

это должно работать нормально.

Смежные вопросы