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){