模型不是邮递员的功能错误

时间:2016-08-27 05:47:51

标签: node.js mongodb mongoose

当我尝试向db插入新帖子时,我在mongodb中进行基本的crud操作我在post man中收到一条消息,因为Test不是函数。

我的路由器功能如下。

function showApprove()
{
    value = confirm("Approve this document?");
    if (value == true)
    {
        document.getElementById("formId").submit();//please set id attribute to your form.
    }
    else
    {

    }
}

我的架构如下。

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

    });

};

我得到的回复如下

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;

3 个答案:

答案 0 :(得分:1)

在您的函数postTest中,test使用“t”并保存为“T”(Test.save()):大写/小写错字。这就是造成你问题的原因。

var postTest = function(test, cb){

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

        cb(data);

    });

};

另外,将common.conn.model更改为common.model

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

修改

您使用Test作为variable名称和model名称。将var更改为test。它应该解决你的问题。

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

    });

});

答案 1 :(得分:0)

您需要以正确的方式编写代码。

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

});

答案 2 :(得分:0)

我认为您将“测试”的实例作为参数传递,但您使用Test作为实例而不是test

你可以尝试这种希望。因为刚刚使用虚拟记录对其进行了测试,并且它有效并且如果它没有意义则意味着您的猫鼬模式存在问题

 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){
            if(!err)
            cb(null,data);
        });
    };