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
取代。 尝试用exec
replacedone
。 那么代码就会像,
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){