2015-05-22 15 views
10

इसलिए मैं वर्तमान में कुछ ट्यूटोरियल्स का पालन करके Sails.js सीख रहा हूं और मुझे कई बार इस समस्या का सामना करना पड़ा है।TypeError: अपरिभाषित कोई फ़ंक्शन नहीं है - 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 द्वारा प्रतिस्थापित किया गया है। exec के साथ done को बदलने का प्रयास करें। फिर कोड किया जाएगा,

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){ 
संबंधित मुद्दे