Skip to content

Commit

Permalink
Add files via upload
Browse files Browse the repository at this point in the history
  • Loading branch information
dasgupta002 authored Jun 11, 2022
1 parent 3d1d7cc commit d95fb0e
Show file tree
Hide file tree
Showing 8 changed files with 1,018 additions and 68 deletions.
28 changes: 11 additions & 17 deletions app.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@ const session = require('express-session');
const MongoDBStore = require('connect-mongodb-session')(session);
const mongoose = require('mongoose');
const multer = require('multer');
const uuid = require('uuid');
const cloudinary = require('cloudinary').v2;
const { CloudinaryStorage } = require('multer-storage-cloudinary');
const csrf = require('csurf');
const path = require('path');

Expand All @@ -19,30 +20,23 @@ const app = express();

const store = new MongoDBStore({ uri: process.env.MONGO_URI, collection: 'sessions' });

const fileStorage = multer.diskStorage({
destination: 'images',
filename: (req, file, callback) => {
callback(null, uuid.v4() + '-' + file.originalname);
cloudinary.config({ cloud_name: 'dasgupta002', api_key: process.env.CLOUDINARY_API_KEY, api_secret: process.env.CLOUDINARY_SECRET });
const storage = new CloudinaryStorage({
cloudinary,
params: {
folder: 'Shopper',
allowedFormats: ['jpeg', 'png', 'jpg'],
}
});

const fileFilter = (req, file, callback) => {
if (file.mimetype === 'image/png' || file.mimetype === 'image/jpg' || file.mimetype === 'image/jpeg') {
callback(null, true);
} else {
callback(null, false);
}
};

const csrfSecurity = csrf();

app.set('view engine', 'pug');

app.use(express.urlencoded({ extended: false }));
app.use(multer({ storage: fileStorage, fileFilter: fileFilter }).single('image'));
app.use(multer({ storage: storage }).single('image'));

app.use(express.static(path.join(__dirname, 'public')));
app.use('/images' , express.static(path.join(__dirname, 'images')));

app.use(session({ secret: 'session secret key', resave: false, saveUninitialized: false, store: store }));
app.use(csrfSecurity);
Expand Down Expand Up @@ -79,8 +73,8 @@ app.use('/', shopRouter);
app.use(errorController.notFound);
app.use((error, req, res, next) => res.status(500).render('500', { pageTitle: '500 Error!' }));

const port = process.env.PORT || 5000;
const port = process.env.PORT || 80;

mongoose.connect(process.env.MONGO_URI, { useNewUrlParser: true, useUnifiedTopology: true, useCreateIndex: true })
.then((result) => app.listen(port))
.catch((error) => console.error(error.message));
.catch((error) => console.error(error.message));
24 changes: 9 additions & 15 deletions controllers/admin.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
const fs = require('fs');
var cloudinary = require('cloudinary').v2;
const { validationResult } = require('express-validator/check');

cloudinary.config({ cloud_name: 'dasgupta002', api_key: process.env.CLOUDINARY_API_KEY, api_secret: process.env.CLOUDINARY_SECRET });

const Product = require('../models/product');

exports.adminItems = (req, res, next) => {
Expand Down Expand Up @@ -32,8 +34,9 @@ exports.submitItem = (req, res, next) => {
res.render('admin/add', { pageTitle: 'Shopper - Add Item', path: '/admin/add-product', errors: errors.array(), oldInput: { title: title, description: description, price: price } });
} else {
const imageURL = image.path;
const fileName = image.filename;

const product = new Product({ createdBy: req.user, title: title, description: description, price: price, imageURL: imageURL });
const product = new Product({ createdBy: req.user, title: title, description: description, price: price, imageURL: imageURL, fileName: fileName });

product.save()
.then((result) => res.redirect('all-products'))
Expand Down Expand Up @@ -72,20 +75,15 @@ exports.submitChanges = (req, res, next) => {
} else {
Product.findById(productId)
.then((product) => {
if(product.userID.toString() !== req.user._id.toString()) {
if(product.createdBy.toString() !== req.user._id.toString()) {
res.redirect('/');
} else {
product.title = title;
product.price = price;
product.description = description;

if(image) {
fs.unlink(product.imageURL, (error) => {
if(error) {
next(error);
}
});

cloudinary.uploader.destroy(product.fileName);
product.imageURL = image.path;
}

Expand All @@ -109,12 +107,8 @@ exports.deleteItem = (req, res, next) => {
if(!product) {
next(new Error('Product not found!'));
} else {
fs.unlink(product.imageURL, (error) => {
if(error) {
next(error);
}
});
return Product.deleteOne({ _id: productId, userID: req.user._id })
cloudinary.uploader.destroy(product.fileName);
return Product.deleteOne({ _id: productId, createdBy: req.user._id })
}
})
.then((result) => res.redirect('all-products'))
Expand Down
4 changes: 2 additions & 2 deletions controllers/auth.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ const { validationResult } = require('express-validator/check');

const User = require('../models/user');

const transporter = nodemailer.createTransport(sendgrid({ auth : { api_key: process.env.SENDGRID_API_KEY } }));
const transporter = nodemailer.createTransport(sendgrid({ auth : { api_key: SENDGRID_API_KEY } }));

exports.showLogin = (req, res, next) => {
res.render('auth/login', { pageTitle: 'User - Login', path: '/auth/login', errors: [], oldInput: { email: '', password: '' } });
Expand Down Expand Up @@ -175,4 +175,4 @@ exports.logoutUser = (req, res, next) => {
req.session.destroy((error) => {
res.redirect('/');
});
};
};
3 changes: 2 additions & 1 deletion models/product.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@ const productSchema = new Schema({
description: { type: String, required: true },
createdBy: { type: Schema.Types.ObjectId, ref: 'User', required: true },
price: { type: Number, required: true },
imageURL: { type: String, required: true }
imageURL: { type: String, required: true },
fileName: { type: String, required: true }
});

module.exports = mongoose.model('Product', productSchema);
Loading

0 comments on commit d95fb0e

Please sign in to comment.