2015-06-19 95 views
0

我想練貓鼬和節點JS,我想用註釋的模式在項目架構,當我運行服務器,它只是拋出這樣的錯誤:的NodeJS - 貓鼬文檔中嵌入

值無效對於模式陣列路徑comments

這裏是我的評論模型

module.exports = function(mongoose) { 

    var Schema = mongoose.Schema; 

    var CommentSchema = new Schema({ 
     text: String, 
     author: String, 
     createDate: { 
      type: Date, 
      default: Date.now 
     } 
    }); 

    console.log("********");  
    console.log(CommentSchema); 
    console.log("********"); 

    mongoose.model('Comment', CommentSchema); 
}; 

而且我的文章型號:

module.exports = function(mongoose){ 
    var Schema = mongoose.Schema; 
    var Comment = require("./Comment"); 

    console.log("--------"); 
    console.log(mongoose); 
    console.log("--------"); 

    var ArticleSchema = new Schema({ 
     title: String, 
     content: String, 
     author: String, 
     comments: [Comment.schema], 
     createDate: { 
      type: Date, 
      default: Date.now 
     } 
    }); 
    mongoose.model('Article', ArticleSchema); 
}; 

它們在一個名爲「models」的文件夾中。

最後我app.js顯示綁定:

var express = require('express'); 
var morgan = require("morgan"); 
var methodOverride = require("method-override"); 
var utils = require("./lib/utils"); 
var config = require("config"); 
var bodyParser = require('body-parser'); 
var app = express(); 
var mongoose = require('mongoose'); 
var mongooseConnection = utils.connectToDatabase(mongoose, config.db); 
var routes = require('./routes/index'); 
var users = require('./routes/users'); 

var app = express(); 

// view engine setup 
app.set("port", process.env.PORT || 3000); 

app.use(express.static(__dirname + '/public')); 
app.use(morgan('dev')); 
app.use(bodyParser()); 
app.use(methodOverride()); 

app.set('views', __dirname + '/views'); 
app.set('view engine', 'jade'); 
app.set('view options', { layout: true}); 

require("./controllers/ArticleController")(app, mongooseConnection); 
require("./controllers/CommentController")(app, mongooseConnection); 
require("./controllers/IndexController")(app, mongooseConnection); 

require("./models/Article")(mongooseConnection); 
require("./models/Comment")(mongooseConnection); 
require("./models/User")(mongooseConnection); 

app.listen(app.get("port"), function(){ 
    console.log("Express server listening on port" + app.get("port")); 
}); 

感謝。

+0

我不記得我需要傳遞給連接架構/模型。只需擺脫那些東西並導出模型。 –

回答

2

在你./models/Article.js您的變量Comment是一個函數(你應該用括號路過的貓鼬變量來調用它),而不是評價模型:

module.exports = function(mongoose){ 
    // some code .. 

    var Comment = require("./Comment"); 

    // some code .. 
}; 

即使你執行上面傳遞你的函數通過在你的./models/Comments.js在你的函數貓鼬變量,你基本上沒有返回:

module.exports = function(mongoose) { 
    // some code .. 

    mongoose.model('Comment', CommentSchema); 
}; 

因此,請嘗試下面我創建的這個示例。在./models/Comment.js

評論模型:

module.exports = function (mongoose) { 
    var CommentSchema = new mongoose.Schema({ 
    text: String, 
    author: String, 
    createDate: {type: Date, default: Date.now} 
    }); 

    return mongoose.model('Comment', CommentSchema); 
}; 

條型號爲./models/Article.js

module.exports = function (mongoose) { 
    var Comment = require('./Comment')(mongoose); 

    var ArticleSchema = new mongoose.Schema({ 
    title: String, 
    content: String, 
    author: String, 
    comments: [Comment.schema], 
    createDate: {type: Date, default: Date.now} 
    }); 

    return mongoose.model('Article', ArticleSchema); 
}; 

主文件在./app.js

var mongoose = require('mongoose'); 

mongoose.connect('mongodb://localhost:27017/mongoose_sky'); 

var Article = require('./models/Article.js')(mongoose); 

var article = new Article({ 
    title: 'my article', 
    content: 'this is my awesome article', 
    author: 'wilson', 
    comments: [ 
    { 
     text: 'hey your article is great', 
     author: 'doug' 
    }, 
    { 
     text: 'hillarious!', 
     author: 'john' 
    } 
    ] 
}); 

article.save(function (err) { 
    if (!err) { 
    console.log('article was saved'); 
    console.log(article); 
    } 
});