首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TypeError:未定义不是函数- Sails.js

TypeError:未定义不是函数- Sails.js
EN

Stack Overflow用户
提问于 2015-05-22 07:59:43
回答 2查看 3.7K关注 0票数 10

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

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

代码语言:javascript
复制
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);
                }
            });
        }
    });
  }
}

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

未定义不是函数。

代码语言:javascript
复制
Users.findByUsername(username).done(function(err, usr)

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

代码语言:javascript
复制
Users.findByUsername(username, function(err, usr)

它起作用了。

这是我的模型下的Users.js

代码语言:javascript
复制
module.exports = {
attributes: {
    username: 'STRING',
    password: 'STRING'
 }
};

知道怎么解决这个问题吗?

同样在chrome控制台中,状态代码是:

500内部服务器错误

问题在哪里?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-22 08:22:28

可能您正在遵循一些教程,该教程是为SailsJS的以前版本编写的。在以前的版本中,有一个名为done的函数,它在新版本中被exec所取代。尝试将done替换为exec。然后代码就会像,

代码语言:javascript
复制
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);
                }
            });
        }
    });
  }
}
票数 11
EN

Stack Overflow用户

发布于 2015-05-22 08:23:16

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

这就是为什么在这里引发异常TypeError: Undefined is not a function的原因,因为这个函数不再存在,属于sails.js的旧版本,现在已经不再推荐它了。

您可以在这里的讨论中找到更多的相关信息。

所以你的代码应该是:

代码语言:javascript
复制
Users.findByUsername(username).exec(function(err, usr){
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30391345

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档