2015-06-19 98 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); 
    } 
});