Node.js从其他函数调用函数不起作用

时间:2016-11-03 14:45:23

标签: javascript node.js

Profile.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 -------

当我拨打电话时<> / api / profile我收到错误

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

由于存在一些常见的逻辑,所以我需要转移到某个功能并想要在不同的地方调用,但是我收到了这个错误。我是寻求帮助的节点js的新手。

3 个答案:

答案 0 :(得分: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));

答案 1 :(得分: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();

答案 2 :(得分:0)

将您的代码更改为:

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

然后在其他方法中使用它:

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

这应该可以正常工作。