Skip to content

Commit

Permalink
added cloudinary for image uploads
Browse files Browse the repository at this point in the history
  • Loading branch information
leonnoel committed Apr 28, 2021
1 parent 6fec7e6 commit de9dee3
Show file tree
Hide file tree
Showing 7 changed files with 177 additions and 76 deletions.
131 changes: 68 additions & 63 deletions controllers/posts.js
Original file line number Diff line number Diff line change
@@ -1,67 +1,72 @@
const Post = require('../models/Post')
const cloudinary = require("../middleware/cloudinary");
const Post = require("../models/Post");

module.exports = {
getProfile: async (req,res)=>{
try{
const posts = await Post.find({user:req.user.id})
res.render('profile.ejs', {posts: posts, user: req.user})
}catch(err){
console.log(err)
}
},
getFeed: async (req,res)=>{
try{
const posts = await Post.find()
.sort({ createdAt: 'desc' })
.lean()
res.render('feed.ejs', {posts: posts})
}catch(err){
console.log(err)
}
},
getPost: async (req,res)=>{
try{
const post = await Post.findById(req.params.id)
res.render('post.ejs', {post: post, user: req.user})
}catch(err){
console.log(err)
}
},
createPost: async (req, res)=>{
try{
await Post.create({
title: req.body.title,
image: '/uploads/' + req.file.filename,
caption: req.body.caption,
likes: 0,
user: req.user.id
})
console.log('Post has been added!')
res.redirect('/profile')
}catch(err){
console.log(err)
}
},
likePost: async (req, res)=>{
try{
await Post.findOneAndUpdate({_id:req.params.id},
{
$inc : {'likes' : 1}
})
console.log('Likes +1')
res.redirect(`/post/${req.params.id}`)
}catch(err){
console.log(err)
}
},
deletePost: async (req, res)=>{
try{
console.log(req.params)
await Post.findOneAndDelete({_id:req.params.id})
console.log('Deleted Post')
res.redirect('/profile')
}catch(err){
res.redirect('/profile')
getProfile: async (req, res) => {
try {
const posts = await Post.find({ user: req.user.id });
res.render("profile.ejs", { posts: posts, user: req.user });
} catch (err) {
console.log(err);
}
},
getFeed: async (req, res) => {
try {
const posts = await Post.find().sort({ createdAt: "desc" }).lean();
res.render("feed.ejs", { posts: posts });
} catch (err) {
console.log(err);
}
},
getPost: async (req, res) => {
try {
const post = await Post.findById(req.params.id);
res.render("post.ejs", { post: post, user: req.user });
} catch (err) {
console.log(err);
}
},
createPost: async (req, res) => {
try {
// Upload image to cloudinary
const result = await cloudinary.uploader.upload(req.file.path);
console.log(result);
await Post.create({
title: req.body.title,
image: result.secure_url,
cloudinaryId: result.public_id,
caption: req.body.caption,
likes: 0,
user: req.user.id,
});
console.log("Post has been added!");
res.redirect("/profile");
} catch (err) {
console.log(err);
}
},
likePost: async (req, res) => {
try {
await Post.findOneAndUpdate(
{ _id: req.params.id },
{
$inc: { likes: 1 },
}
);
console.log("Likes +1");
res.redirect(`/post/${req.params.id}`);
} catch (err) {
console.log(err);
}
},
deletePost: async (req, res) => {
try {
console.log(req.params);
await Post.findOneAndDelete({ _id: req.params.id });
console.log("Deleted Post");
res.redirect("/profile");
} catch (err) {
res.redirect("/profile");
}
}
},
};
11 changes: 11 additions & 0 deletions middleware/cloudinary.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
const cloudinary = require("cloudinary").v2;

require("dotenv").config({ path: "./config/.env" });

cloudinary.config({
cloud_name: process.env.CLOUD_NAME,
api_key: process.env.API_KEY,
api_secret: process.env.API_SECRET,
});

module.exports = cloudinary;
23 changes: 13 additions & 10 deletions middleware/multer.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
const multer = require("multer");
module.exports = {
storage: multer.diskStorage({
destination: function (req, file, callback) {
callback(null, "/src/post-images");
},
filename: function (req, file, callback) {
callback(null, file.fieldname);
},
}),
};
const path = require("path");

module.exports = multer({
storage: multer.diskStorage({}),
fileFilter: (req, file, cb) => {
let ext = path.extname(file.originalname);
if (ext !== ".jpg" && ext !== ".jpeg" && ext !== ".png") {
cb(new Error("File type is not supported"), false);
return;
}
cb(null, true);
},
});
4 changes: 4 additions & 0 deletions models/Post.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,10 @@ const PostSchema = new mongoose.Schema({
type: String,
require: true,
},
cloudinaryId: {
type: String,
require: true,
},
caption: {
type: String,
required: true,
Expand Down
79 changes: 79 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
"license": "MIT",
"dependencies": {
"bcrypt": "^5.0.1",
"cloudinary": "^1.25.1",
"connect-mongo": "^3.2.0",
"dotenv": "^8.2.0",
"ejs": "^3.1.6",
Expand Down
4 changes: 1 addition & 3 deletions routes/posts.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
const express = require("express");
const router = express.Router();
const multer = require("multer");
const upload = multer({ dest: "public/uploads/" });
const { storage } = require("../middleware/multer");
const upload = require("../middleware/multer");
const postsController = require("../controllers/posts");
const { ensureAuth, ensureGuest } = require("../middleware/auth");

Expand Down

0 comments on commit de9dee3

Please sign in to comment.