2015-05-22 28 views
10

Così sto attualmente imparando Sails.js attraverso alcuni tutorial e ho riscontrato questo problema molte volte.TypeError: Undefined non è una funzione - Sails.js

Ho provato a cercare le soluzioni ma nessuna sembrava funzionare.

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

I problemi sembra essere su questa linea, si dice che:

undefined is not a function.

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

Mi sembra che il problema è sul .done perché quando provo a fare in questo modo :

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

funziona.

Questo è il mio Users.js sotto modello

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

Qualche idea su come risolvere questo problema?

anche in consolle cromata il codice di stato è:

500 Internal Server Error

Dove potrebbe essere il problema?

risposta

11

Forse stai seguendo un tutorial che è stato scritto per la versione precedente di SailsJS. Nella versione precedente c'era una funzione denominata done, che è stata sostituita da exec nelle versioni più recenti. Prova a sostituire done con exec. Poi il codice sarà come,

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

Ha funzionato, grazie signore! :) Immagino che dovrei controllare le versioni di sails.js grazie ancora! – bless1204

+1

Tu sei l'uomo, grazie bruh! – luke

1

Questo è un problema comune causato dal fatto che la funzione .done() è ora deprecato in sails.js ed è probabilmente rimosso, ma è possibile sostituirlo con .exec() la funzione.

Ecco perché l'eccezione TypeError: Undefined is not a function viene sollevata qui, perché questa funzione non esiste più e appartiene alle vecchie versioni di sails.js ed è ora obsoleta.

Potete trovare ulteriori abiout in this discussion here.

Così il vostro codice dovrebbe essere:

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