[英]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.