2015-05-22 3 views
10

Так что я в настоящее время изучаю Sails.js с помощью следующих уроков, и я столкнулся с этой проблемой много раз.ТипError: Undefined не является функцией - 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 is not a function.

Users.findByUsername(username).done(function(err, usr) 

Мне кажется, что проблема на .done, потому что, когда я пытаюсь сделать это так :

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

Это работает.

Это мой Users.js под модель

module.exports = { 
attributes: { 
    username: 'STRING', 
    password: 'STRING' 
} 
}; 

Любая идея о том, как это исправить?

Также в хромированной консоли код состояния:

500 Internal Server Error

Где может быть проблема?

ответ

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

Он работал, спасибо, сэр! :) Я думаю, мне придется проверить версии sails.js еще раз! – bless1204

+1

Ты мужчина, спасибо брух! – luke

1

Это общая проблема, вызванная тем, что функция .done() теперь осуждается в sails.js и это, вероятно, удален, но вы можете заменить его .exec() функции.

Вот почему здесь возникает исключение TypeError: Undefined is not a function, потому что эта функция больше не существует и принадлежит старым версиям sails.js, и теперь она устарела.

Вы можете найти более подробную информацию об этом в this discussion here.

Так что ваш код должен быть:

Users.findByUsername(username).exec(function(err, usr){ 
Смежные вопросы