Guest User

express.js web app

a guest
Jun 14th, 2018
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.32 KB | None | 0 0
  1. //====app.js====/
  2.  
  3. require('dotenv').config();
  4. var express = require("express");
  5. var app = express();
  6. var mongoose = require("mongoose");
  7. var bodyParser = require("body-parser");
  8. var flash = require("connect-flash");
  9. var Mail = require("./models/mail");
  10. var Blog = require("./models/blogpost");
  11. var Comment = require("./models/comments");
  12. var methodOverride = require("method-override");
  13.  
  14.  
  15.  
  16. var indexRoutes = require("./routes/index");
  17. var contactRoutes = require("./routes/mail");
  18. var blogRoutes = require("./routes/blog");
  19. var commentRoutes = require("./routes/comments");
  20. //-------------//
  21. // APP CONFIG//
  22. //-------------//
  23. mongoose.connect(process.env.DATABASEURL)
  24. .then(connection => {
  25. console.log('Connected to MongoDB')
  26. })
  27. .catch(error => {
  28. console.log(error.message)
  29. });
  30.  
  31. app.use(bodyParser.urlencoded({extended:true}));
  32. app.set("view engine", "ejs");
  33. app.use(express.static(__dirname + "/public"));
  34. app.use(methodOverride("_method"));
  35. app.use(flash());
  36.  
  37. app.use(require("express-session")({
  38. secret: "My name is Saint Chuks",
  39. resave: false,
  40. saveUninitialized: false
  41. }));
  42.  
  43. app.use(function(req, res, next){
  44. res.locals.error = req.flash("error");
  45. res.locals.success = req.flash("success");
  46. next();
  47. });
  48.  
  49. app.use(indexRoutes);
  50. app.use("/contact", contactRoutes);
  51. app.use("/blog", blogRoutes);
  52. app.use("/blog/:id/comments");
  53.  
  54.  
  55.  
  56. app.listen(process.env.PORT, process.env.IP, function(){
  57. console.log("Portfolio server started!!");
  58. });
  59.  
  60. //====Routes======//
  61. //blog.js
  62. var express = require("express");
  63. var router = express.Router();
  64. var Blog = require("../models/blogpost");
  65. var multer = require("multer");
  66. var async = require("async");
  67.  
  68. //Multer Storage
  69. var storage = multer.diskStorage({
  70. filename: function(req, file, callback){
  71. callback(null, Date.now()+ file.originalname);
  72.  
  73. }});
  74.  
  75. //Multer Filter
  76. var imageFilter = function(req, file, cb){
  77. // accept only image files
  78. if(!file.originalname.match(/\.(jpg|jpeg|png|gif)$/i)){
  79. cb(new Error('only image files are allowed'), false);
  80. }
  81. cb(null, true);
  82. };
  83.  
  84. //Storing Image + Filter
  85. var upload = multer({storage: storage, fileFilter: imageFilter});
  86.  
  87. //Cloudinary Configuration
  88. var cloudinary = require("cloudinary");
  89. cloudinary.config({
  90. cloud_name: 'dnposhqpc',
  91. api_key: process.env.CLOUDINARY_API_KEY,
  92. api_secret: process.env.CLOUDINARY_API_SECRET
  93. });
  94.  
  95.  
  96. //------Routes----
  97. //---------------/
  98.  
  99.  
  100. // INDEX ROUTE TO SHOW ALL BLOG POST
  101. router.get("/", function(req, res) {
  102. Blog.find({}, function(err, blogs){
  103. if(err){
  104. console.log("Error");
  105.  
  106. } else {
  107. res.render('blog/index', {blogs: blogs});
  108. }
  109.  
  110. });
  111.  
  112. });
  113.  
  114. // New Route---/
  115.  
  116. router.get("/new", function(req, res){
  117. res.render("blog/new");
  118. });
  119.  
  120. //Create New Blog
  121. router.post("/", upload.single('image'), function(req, res){
  122. var title = req.body.title;
  123. var image = req.body.image;
  124. var imageId = req.body.imageId;
  125. var body = req.body.body;
  126.  
  127. cloudinary.uploader.upload(req.file.path, function(result){
  128. image = result.secure_url;
  129. imageId = result.public_id;
  130.  
  131.  
  132. var newBlog = {title: title, image: image, imageId: imageId, body: body};
  133. Blog.create(newBlog, function(err, newpost){
  134. if(err || !newpost){
  135. console.log('error');
  136. } else {
  137. console.log('newpost');
  138. res.redirect("/blog");
  139. }
  140. });
  141. });
  142. })
  143. // SHOW ROUTE
  144. router.get("/:id", function(req, res) {
  145. Blog.findById(req.params.id, function(err, foundBlog){
  146. if(err){
  147. console.log('error');
  148. res.redirect("/blog");
  149. } else {
  150. res.render("blog/show", {blog: foundBlog});
  151. }
  152. });
  153. });
  154.  
  155. // EDIT ROUTE
  156. router.get("/:id/edit", function(req, res) {
  157. Blog.findById(req.params.id, function(err, foundBlog){
  158. if(err) {
  159. console.log('error');
  160. res.redirect("/blog");
  161. } else {
  162. res.render("blog/edit", {blog: foundBlog});
  163. }
  164. });
  165.  
  166. });
  167.  
  168. // UPDATE ROUTE
  169. router.put("/:id", upload.single('image'), function(req, res){
  170. Blog.findById(req.params.id, async function(err, foundBlog){
  171. if(err){
  172. req.flash("error", "Blog ID not found");
  173. return res.redirect("back");
  174. } else {
  175. if(req.file){
  176. try {
  177. await cloudinary.v2.uploader.destroy(foundBlog.imageId);
  178. var result = await cloudinary.v2.uploader.upload(req.file.path);
  179. foundBlog.imageId = result.public_id;
  180. foundBlog.image = result.secure_url;
  181. } catch(err){
  182.  
  183. req.flash("error", "Blog ID not found");
  184. return res.redirect("back");
  185. }
  186. }
  187. foundBlog.title = req.body.title;
  188. foundBlog.body = req.body.body;
  189. foundBlog.save();
  190. req.flash("success","Successfully Updated!");
  191. res.redirect("/blog/" + foundBlog._id);
  192. }
  193. });
  194. });
  195.  
  196. // DELETE ROUTE
  197. router.delete("/:id", function(req, res){
  198. Blog.findById(req.params.id, async function(err, foundBlog) {
  199. if(err) {
  200. req.flash("error", "Blog ID not found");
  201. return res.redirect("back");
  202. }
  203. try {
  204. await cloudinary.v2.uploader.destroy(foundBlog.imageId);
  205. foundBlog.remove();
  206. req.flash("success","Successfully Updated!");
  207. res.redirect("/blog");
  208. } catch(err) {
  209. if(err) {
  210. req.flash("error", "Blog ID not found");
  211. return res.redirect("back");
  212. }
  213.  
  214. }
  215.  
  216. });
  217. });
  218.  
  219. module.exports = router;
  220.  
  221. //comments.js
  222. var express = require("express");
  223. var router = express.Router();
  224. var Blog = require("../models/blogpost");
  225. var Comment = require("../models/comments");
  226.  
  227.  
  228. //===============/
  229. //====ROUTES====/
  230. // COMMENTS NEW ROUTE
  231.  
  232. router.get("/new", function(req, res){
  233. Blog.findById(req.params.id, function(err, foundblog){
  234. if(err) {
  235. console.log("error", "no id found");
  236. res.redirect("back");
  237. } else {
  238. res.render("/commentnew", {foundblog: foundblog});
  239. }
  240. });
  241. });
  242. module.exports = router;
  243.  
  244. //====SCHEMAS===//
  245. //comments.js
  246. var mongoose = require("mongoose");
  247.  
  248. var commentSchema = mongoose.Schema({
  249. text: String,
  250. createdOn: { type: Date, default: Date.now}
  251. });
  252. module.exports = mongoose.model('Comment', commentSchema);
  253.  
  254. //blogpost.js
  255. var mongoose = require("mongoose");
  256. var Blogschema = new mongoose.Schema ({
  257. image: String,
  258. imageId: String,
  259. title: String,
  260. body: String,
  261. created: {type: Date, default: Date.now},
  262. comment: [
  263. {
  264. type: mongoose.Schema.Types.ObjectId,
  265. ref: 'comment'
  266. }
  267. ]
  268.  
  269. }, {usePushEach: true});
  270.  
  271. module.exports = mongoose.model('Blog', Blogschema);
Add Comment
Please, Sign In to add comment