Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var express = require("express");
- var router = express.Router();
- var Blog = require("../models/blogpost");
- var multer = require("multer");
- var async = require("async");
- //Multer Storage
- var storage = multer.diskStorage({
- filename: function(req, file, callback){
- callback(null, Date.now()+ file.originalname);
- }});
- //Multer Filter
- var imageFilter = function(req, file, cb){
- // accept only image files
- if(!file.originalname.match(/\.(jpg|jpeg|png|gif)$/i)){
- cb(new Error('only image files are allowed'), false);
- }
- cb(null, true);
- };
- //Storing Image + Filter
- var upload = multer({storage: storage, fileFilter: imageFilter});
- //Cloudinary Configuration
- var cloudinary = require("cloudinary");
- cloudinary.config({
- cloud_name: 'dnposhqpc',
- api_key: process.env.CLOUDINARY_API_KEY,
- api_secret: process.env.CLOUDINARY_API_SECRET
- });
- //------Routes----
- //---------------/
- // INDEX ROUTE TO SHOW ALL BLOG POST
- router.get("/", function(req, res) {
- Blog.find({}, function(err, blogs){
- if(err){
- console.log("Error");
- } else {
- res.render('blog/index', {blogs: blogs});
- }
- });
- });
- // New Route---/
- router.get("/new", function(req, res){
- res.render("blog/new");
- });
- //Create New Blog
- router.post("/", upload.single('image'), function(req, res){
- var title = req.body.title;
- var image = req.body.image;
- var imageId = req.body.imageId;
- var body = req.body.body;
- cloudinary.uploader.upload(req.file.path, function(result){
- image = result.secure_url;
- imageId = result.public_id;
- var newBlog = {title: title, image: image, imageId: imageId, body: body};
- Blog.create(newBlog, function(err, newpost){
- if(err || !newpost){
- console.log('error');
- } else {
- console.log('newpost');
- res.redirect("/blog");
- }
- });
- });
- })
- // SHOW ROUTE
- router.get("/:id", function(req, res) {
- Blog.findById(req.params.id, function(err, foundBlog){
- if(err){
- console.log('error');
- res.redirect("/blog");
- } else {
- res.render("blog/show", {blog: foundBlog});
- }
- });
- });
- // EDIT ROUTE
- router.get("/:id/edit", function(req, res) {
- Blog.findById(req.params.id, function(err, foundBlog){
- if(err) {
- console.log('error');
- res.redirect("/blog");
- } else {
- res.render("blog/edit", {blog: foundBlog});
- }
- });
- });
- // UPDATE ROUTE
- router.put("/id", upload.single('image'), function(req, res, next){
- var title = req.body.title;
- var image = req.body.image;
- var imageId = req.body.imageId;
- var body = req.body.body;
- var blog = {title: title, image: image, imageId: imageId, body: body};
- async.waterfall([
- function(data, done) {
- // handle image uploading
- Blog.findById(req.params.id, function(err, updateblog) {
- if(err || !updateblog) {
- console.log(err);
- req.flash("error", err.message);
- return res.redirect("back");
- } else {
- done(null, updateblog, data);
- }
- });
- },
- function(updateblog, data, done) {
- if(req.file) {
- cloudinary.v2.uploader.destroy(updateblog.imageId, function(err, result) {
- if(err) {
- req.flash("error", err.message);
- return res.redirect("back");
- } else {
- done(null, updateblog, data);
- }
- });
- } else {
- done(null, updateblog, data);
- }
- },
- function(updateblog, data, done) {
- // if new image uploaded, destroy the old one
- if(req.file) {
- cloudinary.uploader.upload(req.file.path, function(result) {
- req.body.blog.imageId = result.public_id;
- req.body.blog.image = result.secure_url;
- done(null, updateblog, data);
- });
- } else {
- done(null, updateblog, data);
- }
- },
- Blog.findByIdAndUpdate(req.params.id, req.body.blog, function(err, blog){
- if(err) {
- console.log('error');
- res.redirect("/blog");
- } else {
- res.redirect("/blog/" + req.params.id);
- }
- })
- ]);
- })
- module.exports = router;
- //----------------------------------
- //===== Edit.ejs
- <% include ../partials/blogheader %>
- <div class="ui main text container segment">
- <div class="ui huge header"> Edit <%= blog.title %></div>
- <!--<div style="width: 30%; margin: 0 auto;">-->
- <form class="ui form" action="/blog/<%= blog._id %>?_method=PUT" method="POST" enctype="multipart/form-data">
- <div class="field">
- <label for="title">Title</label>
- <input type="text" name="title" value="<%= blog.title %>">
- </div>
- <div class="field">
- <label for="body">Message</label>
- <textarea name="body" row="3"><%= blog.body %></textarea>
- </div>
- <div class="field">
- <label for="image">Image</label>
- <input type="file" id="image" name="image" value="<%= blog.image %>">
- </div>
- <div class="field">
- <button class="ui blue basic big button">Edit</button>
- </div>
- </form>
- <a href="/">Go Back</a>
- </div>
- </div>
Add Comment
Please, Sign In to add comment