TypeError:Undefined不是函数 - Sails.js

时间:2015-05-22 07:59:43

标签: javascript node.js sails.js typeerror

所以我目前正在通过以下教程学习Sails.js,现在我已多次遇到此问题。

我尝试寻找解决方案,但似乎都没有。

module.exports = {
signup: function(req, res) {
    var username = req.param("username");
    var password = req.param("password");

    Users.findByUsername(username).done(function(err, usr){
        if (err) {
            res.send(500, { error: "DB Error" });
        } else if (usr) {
            res.send(400, {error: "Username already Taken"});
        } else {
            var hasher = require("password-hash");
            password = hasher.generate(password);

            Users.create({username: username, password: password}).done(function(error, user) {
                if (error) {
                    res.send(500, {error: "DB Error"});
                } else {
                    req.session.user = user;
                    res.send(user);
                }
            });
        }
    });
  }
}

问题似乎就在这条线上,它说:

  

undefined不是函数。

Users.findByUsername(username).done(function(err, usr)

在我看来问题出现在.done上,因为当我尝试这样做时:

Users.findByUsername(username, function(err, usr)

它有效。

这是模型

下的Users.js
module.exports = {
attributes: {
    username: 'STRING',
    password: 'STRING'
 }
};

有关如何解决这个问题的想法吗?

同样在Chrome控制台中,状态代码为:

  

500内部服务器错误

哪里可能是问题?

2 个答案:

答案 0 :(得分:11)

您可能正在关注为SailsJS的早期版本编写的一些教程。在以前的版本中,有一个名为done的函数,在较新版本中被exec替换。尝试将done替换为exec。然后代码就像,

module.exports = {
signup: function(req, res) {
    var username = req.param("username");
    var password = req.param("password");

    Users.findByUsername(username).exec(function(err, usr){
        if (err) {
            res.send(500, { error: "DB Error" });
        } else if (usr) {
            res.send(400, {error: "Username already Taken"});
        } else {
            var hasher = require("password-hash");
            password = hasher.generate(password);

            Users.create({username: username, password: password}).done(function(error, user) {
                if (error) {
                    res.send(500, {error: "DB Error"});
                } else {
                    req.session.user = user;
                    res.send(user);
                }
            });
        }
    });
  }
}

答案 1 :(得分:1)

这是一个常见问题,因为.done()功能现已在sails.js中弃用,并且可能已将其删除,但您可以将其替换为.exec()功能。

这就是为什么在此引发异常TypeError: Undefined is not a function的原因,因为此功能不再存在且属于sails.js的旧版本,现在已弃用。

您可以在 this discussion here 中找到更多内容。

所以你的代码应该是:

Users.findByUsername(username).exec(function(err, usr){