Skip to content

Commit 296a406

Browse files
authored
Merge pull request mschwarzmueller#3 from ishendyweb/02-mongoose-seed-get
Added mongoose, seed data and fetch + display data
2 parents b0183c0 + ee5e375 commit 296a406

6 files changed

Lines changed: 92 additions & 80 deletions

File tree

app.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,14 @@ var logger = require('morgan');
55
var cookieParser = require('cookie-parser');
66
var bodyParser = require('body-parser');
77
var expressHbs = require('express-handlebars');
8+
var mongoose = require('mongoose');
89

910
var routes = require('./routes/index');
1011

1112
var app = express();
1213

14+
mongoose.connect('localhost:27017/shopping');
15+
1316
// view engine setup
1417
app.engine('.hbs', expressHbs({defaultLayout: 'layout', extname: '.hbs'}));
1518
app.set('view engine', '.hbs');

models/product.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
var mongoose = require('mongoose');
2+
var Schema = mongoose.Schema;
3+
4+
var schema = new Schema({
5+
imagePath: {type: String, required: true},
6+
title: {type: String, required: true},
7+
description: {type: String, required: true},
8+
price: {type: Number, required: true}
9+
});
10+
11+
module.exports = mongoose.model('Product', schema);

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
"express": "~4.13.1",
1313
"express-handlebars": "^3.0.0",
1414
"hbs": "~3.1.0",
15+
"mongoose": "^4.4.16",
1516
"morgan": "~1.6.1",
1617
"serve-favicon": "~2.3.0"
1718
}

routes/index.js

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,17 @@
11
var express = require('express');
22
var router = express.Router();
3+
var Product = require('../models/product');
34

45
/* GET home page. */
56
router.get('/', function(req, res, next) {
6-
res.render('shop/index', { title: 'Shopping Cart' });
7+
Product.find(function(err, docs) {
8+
var productChunks = [];
9+
var chunkSize = 3;
10+
for (var i = 0; i < docs.length; i += chunkSize) {
11+
productChunks.push(docs.slice(i, i + chunkSize));
12+
}
13+
res.render('shop/index', { title: 'Shopping Cart', products: productChunks });
14+
});
715
});
816

917
module.exports = router;

seed/product-seeder.js

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
var Product = require('../models/product');
2+
3+
var mongoose = require('mongoose');
4+
5+
mongoose.connect('localhost:27017/shopping');
6+
7+
var products = [
8+
new Product({
9+
imagePath: 'https://upload.wikimedia.org/wikipedia/en/5/5e/Gothiccover.png',
10+
title: 'Gothic Video Game',
11+
description: 'Awesome Game!!!!',
12+
price: 10
13+
}),
14+
new Product({
15+
imagePath: 'http://eu.blizzard.com/static/_images/games/wow/wallpapers/wall2/wall2-1440x900.jpg',
16+
title: 'World of Warcraft Video Game',
17+
description: 'Also awesome? But of course it was better in vanilla ...',
18+
price: 20
19+
}),
20+
new Product({
21+
imagePath: 'https://support.activision.com/servlet/servlet.FileDownload?file=00PU000000Rq6tz',
22+
title: 'Call of Duty Video Game',
23+
description: 'Meh ... nah, it\'s okay I guess',
24+
price: 40
25+
}),
26+
new Product({
27+
imagePath: 'https://pmcdeadline2.files.wordpress.com/2014/02/minecraft__140227211000.jpg',
28+
title: 'Minecraft Video Game',
29+
description: 'Now that is super awesome!',
30+
price: 15
31+
}),
32+
new Product({
33+
imagePath: 'https://d1r7xvmnymv7kg.cloudfront.net/sites_products/darksouls3/assets/img/DARKSOUL_facebook_mini.jpg',
34+
title: 'Dark Souls 3 Video Game',
35+
description: 'I died!',
36+
price: 50
37+
})
38+
];
39+
40+
var done = 0;
41+
for (var i = 0; i < products.length; i++) {
42+
products[i].save(function(err, result) {
43+
done++;
44+
if (done === products.length) {
45+
exit();
46+
}
47+
});
48+
}
49+
50+
function exit() {
51+
mongoose.disconnect();
52+
}

views/shop/index.hbs

Lines changed: 16 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -1,82 +1,19 @@
1-
<div class="row">
2-
<div class="col-sm-6 col-md-4">
3-
<div class="thumbnail">
4-
<img src="https://upload.wikimedia.org/wikipedia/en/5/5e/Gothiccover.png" alt="..." class="img-responsive">
5-
<div class="caption">
6-
<h3>Thumbnail label</h3>
7-
<p class="description">Lorem ipsum dolor sit amet, consectetur adipisicing elit. A consequuntur debitis delectus deserunt dolore dolorem eum expedita, inventore nobis omnis perferendis possimus quas repellat soluta, sunt voluptate, voluptates! Assumenda, nulla?</p>
8-
<div class="clearfix">
9-
<div class="price pull-left">$12</div>
10-
<a href="#" class="btn btn-success pull-right" role="button">Button</a>
1+
{{# each products }}
2+
<div class="row">
3+
{{# each this }}
4+
<div class="col-sm-6 col-md-4">
5+
<div class="thumbnail">
6+
<img src="{{ this.imagePath }}" alt="..." class="img-responsive">
7+
<div class="caption">
8+
<h3>{{ this.title }}</h3>
9+
<p class="description">{{ this.description }}</p>
10+
<div class="clearfix">
11+
<div class="price pull-left">${{ this.price }}</div>
12+
<a href="#" class="btn btn-success pull-right" role="button">Add to Shopping Cart</a>
13+
</div>
14+
</div>
1115
</div>
1216
</div>
13-
</div>
17+
{{/each}}
1418
</div>
15-
<div class="col-sm-6 col-md-4">
16-
<div class="thumbnail">
17-
<img src="https://upload.wikimedia.org/wikipedia/en/5/5e/Gothiccover.png" alt="..." class="img-responsive">
18-
<div class="caption">
19-
<h3>Thumbnail label</h3>
20-
<p class="description">Lorem ipsum dolor sit amet, consectetur adipisicing elit. A consequuntur debitis delectus deserunt dolore dolorem eum expedita, inventore nobis omnis perferendis possimus quas repellat soluta, sunt voluptate, voluptates! Assumenda, nulla?</p>
21-
<div class="clearfix">
22-
<div class="price pull-left">$12</div>
23-
<a href="#" class="btn btn-success pull-right" role="button">Button</a>
24-
</div>
25-
</div>
26-
</div>
27-
</div>
28-
<div class="col-sm-6 col-md-4">
29-
<div class="thumbnail">
30-
<img src="https://upload.wikimedia.org/wikipedia/en/5/5e/Gothiccover.png" alt="..." class="img-responsive">
31-
<div class="caption">
32-
<h3>Thumbnail label</h3>
33-
<p class="description">Lorem ipsum dolor sit amet, consectetur adipisicing elit. A consequuntur debitis delectus deserunt dolore dolorem eum expedita, inventore nobis omnis perferendis possimus quas repellat soluta, sunt voluptate, voluptates! Assumenda, nulla?</p>
34-
<div class="clearfix">
35-
<div class="price pull-left">$12</div>
36-
<a href="#" class="btn btn-success pull-right" role="button">Button</a>
37-
</div>
38-
</div>
39-
</div>
40-
</div>
41-
</div>
42-
<div class="row">
43-
<div class="col-sm-6 col-md-4">
44-
<div class="thumbnail">
45-
<img src="https://upload.wikimedia.org/wikipedia/en/5/5e/Gothiccover.png" alt="..." class="img-responsive">
46-
<div class="caption">
47-
<h3>Thumbnail label</h3>
48-
<p class="description">Lorem ipsum dolor sit amet, consectetur adipisicing elit. A consequuntur debitis delectus deserunt dolore dolorem eum expedita, inventore nobis omnis perferendis possimus quas repellat soluta, sunt voluptate, voluptates! Assumenda, nulla?</p>
49-
<div class="clearfix">
50-
<div class="price pull-left">$12</div>
51-
<a href="#" class="btn btn-success pull-right" role="button">Button</a>
52-
</div>
53-
</div>
54-
</div>
55-
</div>
56-
<div class="col-sm-6 col-md-4">
57-
<div class="thumbnail">
58-
<img src="https://upload.wikimedia.org/wikipedia/en/5/5e/Gothiccover.png" alt="..." class="img-responsive">
59-
<div class="caption">
60-
<h3>Thumbnail label</h3>
61-
<p class="description">Lorem ipsum dolor sit amet, consectetur adipisicing elit. A consequuntur debitis delectus deserunt dolore dolorem eum expedita, inventore nobis omnis perferendis possimus quas repellat soluta, sunt voluptate, voluptates! Assumenda, nulla?</p>
62-
<div class="clearfix">
63-
<div class="price pull-left">$12</div>
64-
<a href="#" class="btn btn-success pull-right" role="button">Button</a>
65-
</div>
66-
</div>
67-
</div>
68-
</div>
69-
<div class="col-sm-6 col-md-4">
70-
<div class="thumbnail">
71-
<img src="https://upload.wikimedia.org/wikipedia/en/5/5e/Gothiccover.png" alt="..." class="img-responsive">
72-
<div class="caption">
73-
<h3>Thumbnail label</h3>
74-
<p class="description">Lorem ipsum dolor sit amet, consectetur adipisicing elit. A consequuntur debitis delectus deserunt dolore dolorem eum expedita, inventore nobis omnis perferendis possimus quas repellat soluta, sunt voluptate, voluptates! Assumenda, nulla?</p>
75-
<div class="clearfix">
76-
<div class="price pull-left">$12</div>
77-
<a href="#" class="btn btn-success pull-right" role="button">Button</a>
78-
</div>
79-
</div>
80-
</div>
81-
</div>
82-
</div>
19+
{{/each}}

0 commit comments

Comments
 (0)