TypeError:Undefined不是一个函数 – Sails.js

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

我试图寻找解决scheme,但没有一个似乎工作。

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

问题似乎是在这一方面,它说:

未定义不是一个函数。

 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内部服务器错误

问题在哪里?

可能是你正在跟着一些为以前版本的SailsJS编写的教程。 在以前的版本中,有一个名为done的函数,它在新版本中被exec取代。 尝试用execreplacedone 。 那么代码就会像,

 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()函数replace它。

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

你可以在这里的讨论中find更多的答案。

所以你的代码应该是:

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