TypeError: Undefined is not a function - Sails.js

TypeError: Undefined is not a function - Sails.js

所以我目前正在通过一些教程学习 Sails.js,我现在已经多次遇到这个问题。

我尝试搜索解决方案,但 none 似乎有效。

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 is not a function.

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 Internal Server Error

问题出在哪里?

您可能正在学习一些为以前版本的 SailsJS 编写的教程。在以前的版本中有一个名为 done 的函数,在新版本中被 exec 取代。尝试用 exec 替换 done。然后代码会像,

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

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

这就是为什么这里抛出异常 TypeError: Undefined is not a function 的原因,因为这个函数已经不存在了,属于旧版本的 sails.js,现在已经弃用了。

您可以在 this discussion here 中找到更多关于它的信息。

所以你的代码应该是:

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