You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
multi-model/controllers/articles.js

75 lines
1.8 KiB

var express = require('express');
var router = express.Router();
var Article = require('../models/articles.js');
var Author = require('../models/authors.js')
router.get('/', function(req, res){
Article.find({}, function(err, foundArticles){
res.render('articles/index.ejs', {
articles: foundArticles
});
})
});
router.get('/new', function(req, res){
Author.find({}, function(err, allAuthors){
res.render('articles/new.ejs', {
authors:allAuthors
});
});
});
router.post('/', function(req, res){
Author.findById(req.body.authorId, function(err, foundAuthor){
Article.create(req.body, function(err, createdArticle){
foundAuthor.articles.push(createdArticle);
foundAuthor.save(function(){
res.redirect('/articles');
})
});
});
});
router.get('/:id', function(req,res){
Article.findById(req.params.id, function(err, foundArticle){
res.render('articles/show.ejs', {
article: foundArticle
});
});
});
router.delete('/:id', function(req, res){
Article.findByIdAndRemove(req.params.id, function(){
res.redirect('/articles');
});
});
router.get('/:id/edit', function(req, res){
Author.find({}, function(err, allAuthors){
Article.findById(req.params.id, function(err, foundArticle){
res.render('articles/edit.ejs', {
article: foundArticle,
authors: allAuthors
});
});
});
});
router.put('/:id', function(req, res){
Author.findOne({'articles._id':req.params.id}, function(err, previousAuthor){
previousAuthor.articles.id(req.params.id).remove();
previousAuthor.save();
});
Author.findById(req.body.authorId, function(err, foundAuthor){
Article.findByIdAndUpdate(req.params.id, req.body, {new:true}, function(err, updatedArticle){
foundAuthor.articles.push(updatedArticle);
foundAuthor.save(function(){
res.redirect('/articles');
});
});
});
});
module.exports = router;