2016-08-27 2 views
3

Iam grundlegende crud-Operation in mongodb, wenn ich versuche, neue Post zu db ich bekomme eine Nachricht in post man als Test ist keine Funktion.Modell ist kein Funktionsfehler im Postboten

Meine Router-Funktion ist wie folgt.

router.route('/createtests').post(function (req, res, next) { 

    var Test = new Test(req.body); 
    postTest(Test, function (data) { 

     res.json({'message': 'The test created sucessfully'}); 

    }); 

}); 

var postTest = function(test, cb){ 

    Test.save(function(err,data){ 

     cb(data); 

    }); 

}; 

Mein Schema ist wie folgt.

var TestSchema = common.Schema({ 

title     : String, 
testCreator    : String, 
datePosted    : { 
          type: Date, 
          default: Date.now 
          }, 
totalQuestions   : Number, 
totalTime    : Number, 
numberOfPeopleTaking : Number, 
dateOfTest    : Date, 
marksPerQuestions  : Number, 
imageUrl    : String, 
testType    : String, 

}); 
var Test = common.conn.model('Test', TestSchema); 
console.log(typeof Test);// logging as function 
console.log(Test);// logging full model with schema 
module.exports = Test; 

Iam eine Antwort bekommen als

{ 
"message": "Test is not a function", 
"error": {} 
} 
+0

ist "gemeinsame" Verweis auf Mungo? – winter

+0

ja. es ist ein Objekt von Mungo. Schema: require ('mongoose'). Schema, ist eine gemeinsame Eigenschaft. –

+0

Probieren Sie 'var Test = common.model ('Test', TestSchema);' anstelle von 'var Test = common.conn.model ('Test', TestSchema);' – winter

Antwort

1

In Ihrer Funktion postTest, folgen Sie test mit 't' und Sie sparen mit 'T' (Test.save()): Groß-/Kleintippfehler. Das ist es, was Ihr Problem verursacht.

var postTest = function(test, cb){ 

    test.save(function(err,data){ //see the change here 'test' instead of 'Test' 

     cb(data); 

    }); 

}; 

Auch Änderung common.conn.model zu common.model

var Test = common.model('Test', TestSchema); 

EDIT

Sie verwenden Test als variable Namen und beide model Namen. Ändern Sie die Variable in test. Es sollte dein Problem lösen.

router.route('/createtests').post(function (req, res, next) { 

    var test = new Test(req.body); //See the change here. 'test' instead of 'Test' 
    postTest(test, function (data) { //pass 'test' 

     res.json({'message': 'The test created sucessfully'}); 

    }); 

}); 
+0

Ja, das macht Sinn .... Aber ich bekomme immer noch den gleichen Fehler ..... –

+0

können Sie überprüfen, ob die Bearbeitung funktioniert? –

+0

Ich verstehe nicht, was du meinst .. –

0

Sie müssen den Code korrekt schreiben.

const Test = require('../models/Test'); // path 
var test = new Test({ 
    email: req.body.title, 
    password: req.body.testType 
}); 

test.save(function(err,data){ 

    cb(data); 

}); 
+0

Ich habe versucht {data: req.body}, aber ich bekomme den gleichen Fehler. –

+0

Weil die Art, wie Sie tun, falsch ist. Versuchen Sie, auf der Konsole zu drucken - {req.body} - das Objekt, das Sie übergeben, ist ein falscher Typ. – yojna

0

Ich denke, Sie eine Instanz von „Test“ als Parameter sind vorbei, aber Sie verwenden Test als Beispiel statt test.

können Sie diese Hoffnung versuchen, die funktioniert. Seit es nur mit Dummy-Datensatz getestet und es funktioniert und wenn es keinen Sinn macht Ihr Mungo-Schema hat Problem

Verwandte Themen