Guest User

express.js web app

a guest
Jun 13th, 2018
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.78 KB | None | 0 0
  1. var express = require("express");
  2. var router = express.Router();
  3. var Blog = require("../models/blogpost");
  4. var multer = require("multer");
  5. var async = require("async");
  6.  
  7. //Multer Storage
  8. var storage = multer.diskStorage({
  9. filename: function(req, file, callback){
  10. callback(null, Date.now()+ file.originalname);
  11.  
  12. }});
  13.  
  14. //Multer Filter
  15. var imageFilter = function(req, file, cb){
  16. // accept only image files
  17. if(!file.originalname.match(/\.(jpg|jpeg|png|gif)$/i)){
  18. cb(new Error('only image files are allowed'), false);
  19. }
  20. cb(null, true);
  21. };
  22.  
  23. //Storing Image + Filter
  24. var upload = multer({storage: storage, fileFilter: imageFilter});
  25.  
  26. //Cloudinary Configuration
  27. var cloudinary = require("cloudinary");
  28. cloudinary.config({
  29. cloud_name: 'dnposhqpc',
  30. api_key: process.env.CLOUDINARY_API_KEY,
  31. api_secret: process.env.CLOUDINARY_API_SECRET
  32. });
  33.  
  34.  
  35. //------Routes----
  36. //---------------/
  37.  
  38.  
  39. // INDEX ROUTE TO SHOW ALL BLOG POST
  40. router.get("/", function(req, res) {
  41. Blog.find({}, function(err, blogs){
  42. if(err){
  43. console.log("Error");
  44.  
  45. } else {
  46. res.render('blog/index', {blogs: blogs});
  47. }
  48.  
  49. });
  50.  
  51. });
  52.  
  53. // New Route---/
  54.  
  55. router.get("/new", function(req, res){
  56. res.render("blog/new");
  57. });
  58.  
  59. //Create New Blog
  60. router.post("/", upload.single('image'), function(req, res){
  61. var title = req.body.title;
  62. var image = req.body.image;
  63. var imageId = req.body.imageId;
  64. var body = req.body.body;
  65.  
  66. cloudinary.uploader.upload(req.file.path, function(result){
  67. image = result.secure_url;
  68. imageId = result.public_id;
  69.  
  70.  
  71. var newBlog = {title: title, image: image, imageId: imageId, body: body};
  72. Blog.create(newBlog, function(err, newpost){
  73. if(err || !newpost){
  74. console.log('error');
  75. } else {
  76. console.log('newpost');
  77. res.redirect("/blog");
  78. }
  79. });
  80. });
  81. })
  82. // SHOW ROUTE
  83. router.get("/:id", function(req, res) {
  84. Blog.findById(req.params.id, function(err, foundBlog){
  85. if(err){
  86. console.log('error');
  87. res.redirect("/blog");
  88. } else {
  89. res.render("blog/show", {blog: foundBlog});
  90. }
  91. });
  92. });
  93.  
  94. // EDIT ROUTE
  95. router.get("/:id/edit", function(req, res) {
  96. Blog.findById(req.params.id, function(err, foundBlog){
  97. if(err) {
  98. console.log('error');
  99. res.redirect("/blog");
  100. } else {
  101. res.render("blog/edit", {blog: foundBlog});
  102. }
  103. });
  104.  
  105. });
  106.  
  107. // UPDATE ROUTE
  108. router.put("/id", upload.single('image'), function(req, res, next){
  109. var title = req.body.title;
  110. var image = req.body.image;
  111. var imageId = req.body.imageId;
  112. var body = req.body.body;
  113. var blog = {title: title, image: image, imageId: imageId, body: body};
  114. async.waterfall([
  115. function(data, done) {
  116. // handle image uploading
  117. Blog.findById(req.params.id, function(err, updateblog) {
  118. if(err || !updateblog) {
  119. console.log(err);
  120. req.flash("error", err.message);
  121. return res.redirect("back");
  122. } else {
  123. done(null, updateblog, data);
  124. }
  125. });
  126. },
  127.  
  128. function(updateblog, data, done) {
  129. if(req.file) {
  130. cloudinary.v2.uploader.destroy(updateblog.imageId, function(err, result) {
  131. if(err) {
  132. req.flash("error", err.message);
  133. return res.redirect("back");
  134. } else {
  135. done(null, updateblog, data);
  136. }
  137. });
  138. } else {
  139. done(null, updateblog, data);
  140. }
  141. },
  142. function(updateblog, data, done) {
  143. // if new image uploaded, destroy the old one
  144. if(req.file) {
  145. cloudinary.uploader.upload(req.file.path, function(result) {
  146. req.body.blog.imageId = result.public_id;
  147. req.body.blog.image = result.secure_url;
  148. done(null, updateblog, data);
  149. });
  150. } else {
  151. done(null, updateblog, data);
  152. }
  153. },
  154.  
  155. Blog.findByIdAndUpdate(req.params.id, req.body.blog, function(err, blog){
  156. if(err) {
  157. console.log('error');
  158. res.redirect("/blog");
  159. } else {
  160. res.redirect("/blog/" + req.params.id);
  161. }
  162. })
  163. ]);
  164. })
  165.  
  166.  
  167.  
  168.  
  169.  
  170. module.exports = router;
  171. //----------------------------------
  172. //===== Edit.ejs
  173. <% include ../partials/blogheader %>
  174.  
  175. <div class="ui main text container segment">
  176.  
  177. <div class="ui huge header"> Edit <%= blog.title %></div>
  178. <!--<div style="width: 30%; margin: 0 auto;">-->
  179.  
  180. <form class="ui form" action="/blog/<%= blog._id %>?_method=PUT" method="POST" enctype="multipart/form-data">
  181. <div class="field">
  182. <label for="title">Title</label>
  183. <input type="text" name="title" value="<%= blog.title %>">
  184. </div>
  185. <div class="field">
  186. <label for="body">Message</label>
  187. <textarea name="body" row="3"><%= blog.body %></textarea>
  188. </div>
  189. <div class="field">
  190. <label for="image">Image</label>
  191. <input type="file" id="image" name="image" value="<%= blog.image %>">
  192. </div>
  193.  
  194. <div class="field">
  195. <button class="ui blue basic big button">Edit</button>
  196. </div>
  197.  
  198.  
  199.  
  200. </form>
  201. <a href="/">Go Back</a>
  202. </div>
  203.  
  204. </div>
Add Comment
Please, Sign In to add comment