簡體   English   中英

貓鼬中的TypeError

[英]TypeError in mongoose

我正在做作業,並試圖使今天在本教程中使用的貓鼬代碼正常工作。 我遇到了一個錯誤,但不確定為什么。

index.js:


var fs = require('fs');
var mongoose = require('mongoose');
var db = mongoose.connection;
var Rooms2406;

var setupRoomDB = function () {
    var roomSchema = mongoose.Schema({
    title: String,
    description: String,
    roomExits: [String]
    });
    Rooms2406 = mongoose.model("Rooms2406", roomSchema);
}
db.once('open', setupRoomDB);


var addRooms = function(){
    /*to do a check each time a room is added*/

    var saveCallbackFunc = function(err, theRoom){
            var status;
            if(err)
                status = 'fail';
            else{
                status = 'sucess';
            }
            console.log(status);
    }

    /*go through the rooms and add each one*/
    debugger;

    /*THIS IS WHERE THE ISSUE IS*/
    var bridge = new Rooms2406({
    title: "Bridge",
    description: "blah",
    roomExits: ['sickbay']});

    debugger;

    var engineering = new Rooms2406({
    title: "Engineering",
    description: "blah.",
    roomExits: ['sickbay']
    });  

    var sickbay = new Rooms2406({
    title: "Sickbay",
    description: "blah",
    roomExits: ['engineering','bridge']
    });

    var secret= new Rooms2406({
    title: "Secret Room",
    description: "blah",
    roomExits: ['engineering', 'sickbay', 'bridge']
    });

    var TheVoid= new Rooms2406({
    title: "The Void",
    description: "blah.",
    roomExits: ['TheVoid']
    });

    /*saving each room*/
    bridge.save(saveCallbackFunc);
    engineering.save(saveCallbackFunc);
    sickbay.save(saveCallbackFunc);
    secret.save(saveCallbackFunc);   
    TheVoid.save(saveCallbackFunc);

然后在start()函數中,我調用addRooms()將房間保存到數據庫中。

function start(req, res) {
/*add rooms to mongodb*/
    addRooms();
    var player = req.body.player;
    // Sanitize the player name as it may be displayed
    req.session.player = sanitize(player).escape();
    req.session.currentRoom = "bridge"; // We start on the bridge
    res.redirect("/game")
}

但是我得到了錯誤:


TypeError: undefined is not a function
    at addRooms (/home/student/a4/adventure-ajax-demo/routes/index.js:45:15)
    at start (/home/student/a4/adventure-ajax-demo/routes/index.js:100:2)
    at callbacks (/home/student/a4/adventure-ajax-demo/node_modules/express/lib/router/index.js:164:37)
    at param (/home/student/a4/adventure-ajax-demo/node_modules/express/lib/router/index.js:138:11)
    at pass (/home/student/a4/adventure-ajax-demo/node_modules/express/lib/router/index.js:145:5)
    at Router._dispatch (/home/student/a4/adventure-ajax-demo/node_modules/express/lib/router/index.js:173:5)
    at Object.router (/home/student/a4/adventure-ajax-demo/node_modules/express/lib/router/index.js:33:10)
    at next (/home/student/a4/adventure-ajax-demo/node_modules/express/node_modules/connect/lib/proto.js:190:15)
    at next (/home/student/a4/adventure-ajax-demo/node_modules/express/node_modules/connect/lib/middleware/session.js:312:9)
    at /home/student/a4/adventure-ajax-demo/node_modules/express/node_modules/connect/lib/middleware/session.js:336:9

我已經將其縮小為一個問題

var bridge = new Rooms2406 ({etc...});

我不明白這里出了什么問題,就像它不知道Rooms2406是什么一樣,但是我已經定義了它。

有什么想法嗎?

謝謝

我認為問題在於未調用setupRoomDb函數,該函數負責用模型初始化變量room2406,因為它表示變量未定義,因此,當您調用addRooms函數時,會發生上述錯誤。

不調用setupRoomDB的原因僅是因為從未觸發數據庫打開事件,因為尚未設置數據庫連接,請使用mongoose.connect連接到數據庫,它將解決您的錯誤。

更新的代碼

var fs = require('fs');
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/myDatabase')//use appropriate database here.
var db = mongoose.connection;
var Rooms2406;

var setupRoomDB = function () {
    var roomSchema = mongoose.Schema({
    title: String,
    description: String,
    roomExits: [String]
    });
    Rooms2406 = mongoose.model("Rooms2406", roomSchema);
}
db.once('open', setupRoomDB);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM