TypeError: Undefined не является функцией - Sails.js
Итак, я в настоящее время изучаю 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'
}
};
Любая идея о том, как это исправить?
Также в хром-консоли код состояния:
500 Внутренняя ошибка сервера
Где может быть проблема?
Ответы
Ответ 1
Возможно, вы следуете руководству, которое написано для предыдущей версии 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);
}
});
}
});
}
}
Ответ 2
Это обычная проблема, вызванная тем, что функция .done()
теперь устарела в sails.js
и, вероятно, удалена, но вы можете заменить ее на функцию .exec()
.
Вот почему здесь возникает исключение TypeError: Undefined is not a function
, потому что эта функция больше не существует и принадлежит старым версиям sails.js
, и теперь она устарела.
Вы можете найти более подробно в здесь обсуждение.
Итак, ваш код должен быть:
Users.findByUsername(username).exec(function(err, usr){