[英]NodeJS - Mongoose document embedding
我正在嘗試練習Mongoose和Node JS,我想在Article模式中使用Comment模式,當我運行服務器時,它只會引發如下錯誤:
架構數組路徑
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);
};
它們位於稱為“模型”的同一文件夾中。
最后是我的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"));
});
謝謝。
在您的./models/Article.js
您的變量Comment
是一個函數(您應該通過帶貓鼬變量的圓括號來調用它),而不是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);
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.