2014-11-05 83 views
2

我想學習一點MEAN堆棧,並開始在thinkster.io上進行教程,並且我已將其發佈到需要使用服務器的部分我認爲在一些概念方面我有很多困難,但有一些我很接近,但我仍然有點失落。所以我請你們幫忙。AngularJS Schema尚未註冊模型「發佈」

第一個文件App.js

var express = require('express'); 
var path = require('path'); 
var favicon = require('serve-favicon'); 
var logger = require('morgan'); 
var cookieParser = require('cookie-parser'); 
var bodyParser = require('body-parser'); 

var routes = require('./routes/index'); 
var users = require('./routes/users'); 

var mongoose = require('mongoose'); 

mongoose.connect('mongodb://localhost/news'); 
require('./models/Posts'); 
require('./models/Comments'); 

var app = express(); 

// view engine setup 
app.set('views', path.join(__dirname, 'views')); 
app.set('view engine', 'ejs'); 

// uncomment after placing your favicon in /public 
//app.use(favicon(__dirname + '/public/favicon.ico')); 
app.use(logger('dev')); 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: false })); 
app.use(cookieParser()); 
app.use(express.static(path.join(__dirname, 'public'))); 

app.use('/', routes); 
app.use('/users', users); 

// catch 404 and forward to error handler 
app.use(function(req, res, next) { 
    var err = new Error('Not Found'); 
    err.status = 404; 
    next(err); 
}); 

// error handlers 

// development error handler 
// will print stacktrace 
if (app.get('env') === 'development') { 
    app.use(function(err, req, res, next) { 
     res.status(err.status || 500); 
     res.render('error', { 
      message: err.message, 
      error: err 
     }); 
    }); 
} 

// production error handler 
// no stacktraces leaked to user 
app.use(function(err, req, res, next) { 
    res.status(err.status || 500); 
    res.render('error', { 
     message: err.message, 
     error: {} 
    }); 
}); 


module.exports = app; 

第二個文件:Index.js

var express = require('express'); 
var router = express.Router(); 

/* GET home page. */ 
router.get('/', function(req, res) { 
    res.render('index', { title: 'Express' }); 
}); 

module.exports = router; 

var mongoose = require('mongoose'); 
var Post = mongoose.model('Post'); 
var Comment = mongoose.model('Comment'); 

router.get('/posts', function(req, res, next) { 
    Post.find(function(err, posts){ 
    if(err){ return next(err); } 

    res.json(posts); 
    }); 
}); 

router.post('/posts', function(req, res, next){ 
    var post = new Post(req.body); 
    post.save(function(err, post){ 
     if(err){return next(err);} 

     res.json(post); 
    }); 
}); 

第三個文件,在那裏我創建的模型對郵政和評論:

Posts.js:

var mongoose = require('mongoose'); 

var PostSchema = new mongoose.Schema({ 
    title: String, 
    link: String, 
    upvotes: {type: Number, default: 0}, 
    comments: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Comment' }] 
}); 

mongoose.model('Post', PostSchema); 

Comments.js:

var mongoose = require('mongoose'); 

var CommentSchema = new mongoose.Schema({ 
    body: String, 
    author: String, 
    upvotes: {type: Number, default: 0}, 
    post: { type: mongoose.Schema.Types.ObjectId, ref: 'Post' } 
}); 

mongoose.model('Comment', CommentSchema); 

當我做故宮開始運行它給我的模式錯誤尚未註冊的模式「郵報」的網站。 你能幫我嗎? 提前謝謝!

回答

9

退房的訂單需要在app.js文件,一定要有

require('./models/Posts'); 

前行

var routes = require('./routes/index'); 

,你需要他們。

+0

這對我有用。對於這個原因爲什麼要求簡單的解釋是否太多了? :) – 2015-02-21 11:54:38

+1

@pipo_dev:文件./routes/index.js使用模型'Post',因此在模型創建之前(本教程中的PostSchema)不需要。 – VinceOPS 2015-10-23 09:33:55

相關問題