所以我目前正在通过以下教程学习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内部服务器错误
哪里可能是问题?
答案 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){