Skip to content

Commit 090e825

Browse files
committed
Adding GridFS
1 parent e801668 commit 090e825

File tree

5 files changed

+57
-30
lines changed

5 files changed

+57
-30
lines changed

app.js

+5-1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@ var flash = require('express-flash');
88
var cookieParser = require('cookie-parser');
99
var router = express.Router();
1010
var MongoStore = require('connect-mongo')(session);
11+
const multer = require('multer');
12+
const GridFsStorage = require('multer-gridfs-storage');
13+
const Grid = require('gridfs-stream');
1114

1215
require('./models/db');
1316
// require('./seed/product-seeder');
@@ -29,7 +32,7 @@ const options = {
2932
const databaseURL = 'mongodb+srv://databaseUser:coronavirus@shophub-mquaf.mongodb.net/ShopHub?retryWrites=true&w=majority';
3033
mongoose.connect(databaseURL, options);
3134

32-
app.use(express.static('public'));
35+
app.use(express.static('./public'));
3336
app.set('views', path.join(__dirname, 'views'));
3437
app.engine('.hbs', exphbs({defaultLayout: 'main', extname: '.hbs'}));
3538
app.set('view engine', '.hbs');
@@ -71,6 +74,7 @@ app.use(function(req,res,next){
7174
next();
7275
});
7376

77+
7478
app.listen(app.get('port'), function(){
7579
console.log('server started on port ' + app.get('port'));
7680
});

controllers/addProductController.js

+33-24
Original file line numberDiff line numberDiff line change
@@ -11,36 +11,46 @@ var Order = require('../models/order');
1111
var Comment = require('../models/comments');
1212

1313
const multer = require('multer');
14-
const storage = multer.diskStorage({
15-
destination: function(req, file, cb){
16-
cb(null, './pictures/')
17-
},
18-
filename: function(req,file, cb){
19-
cb(null, file.originalname);
20-
}
14+
const GridFsStorage = require('multer-gridfs-storage');
15+
const Grid = require('gridfs-stream');
16+
17+
const databaseURL = 'mongodb+srv://databaseUser:coronavirus@shophub-mquaf.mongodb.net/ShopHub?retryWrites=true&w=majority';
18+
const conn = mongoose.createConnection(databaseURL);
19+
let gfs;
20+
21+
conn.once('open', () => {
22+
gfs = Grid(conn.db, mongoose.mongo);
23+
gfs.collection('uploads');
2124
})
22-
const fileFilter = (req,file, cb) => {
23-
if(file.mimetype === 'image/jpg' || file.mimetype === 'image/jpeg' ||file.mimetype === 'image/png'){
24-
cb(null,true);
25-
}
26-
else{
27-
cb(null,false);
28-
}
29-
}
30-
const upload = multer({
31-
storage: storage,
32-
limits: {
33-
fileFilter: fileFilter
25+
26+
const storage = new GridFsStorage({
27+
url: databaseURL,
28+
file: (req, file) => {
29+
return new Promise((resolve, reject) => {
30+
crypto.randomBytes(16, (err, buf) => {
31+
if (err) {
32+
return reject(err);
33+
}
34+
const filename = buf.toString('hex') + path.extname(file.originalname);
35+
const fileInfo = {
36+
filename: filename,
37+
bucketName: 'uploads'
38+
};
39+
resolve(fileInfo);
40+
});
41+
});
3442
}
35-
})
43+
});
44+
const upload = multer({ storage });
3645

3746
router.get('/', (req, res) => {
3847
res.render('addProduct', {
3948
});
4049
});
4150

42-
router.post('/',upload.single('productImage') ,(req, res) => {
43-
if(req.body.productName == '' || req.body.picture == '' || req.body.price == '' || req.body.description == ''){
51+
router.post('/', upload.single('picture') ,(req, res) => {
52+
console.log(req.file)
53+
if(req.body.productName == '' || req.body.price == '' || req.body.description == ''){
4454
res.render('addProduct',{
4555
message: "Please complete the necessary information for the product"
4656
})
@@ -59,8 +69,7 @@ router.post('/',upload.single('productImage') ,(req, res) => {
5969
}
6070
else{
6171
var product = new Product();
62-
// product.imagePath = `pictures/${req.body.picture}`;
63-
product.imagePath = req.file.path;
72+
// product.imagePath = `pictures/${req.file.filename}`;
6473
product.title = req.body.productName;
6574
product.price = req.body.price;
6675
product.description = req.body.description;

package-lock.json

+16-3
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,12 @@
2020
"express-handlebars": "^3.1.0",
2121
"express-session": "^1.17.0",
2222
"express-validator": "^6.4.0",
23+
"gridfs-stream": "^1.1.1",
2324
"locus": "^2.0.4",
2425
"mongodb": "^3.5.5",
2526
"mongoose": "^5.9.5",
2627
"multer": "^1.4.2",
27-
"multer-gridfs-storage": "^4.0.2",
28+
"multer-gridfs-storage": "^4.0.3",
2829
"nodemon": "^2.0.2",
2930
"react-modal": "^3.11.2"
3031
},

views/addProduct.hbs

+1-1
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ input[type=number]::-webkit-outer-spin-button {
4747
<div class="col-lg-6">
4848
<div id="ui">
4949
<h1 class="text-white">Add a Product</h1>
50-
<form class="form-group text-center" action="/addProduct" method="POST">
50+
<form class="form-group text-center" action="/addProduct" method="POST" enctype="multipart/form-data">
5151
<div class="row">
5252
<div class="col-lg-6">
5353
<label>Product Name: </label>

0 commit comments

Comments
 (0)