Skip to content

Commit 940800d

Browse files
committed
updated files
1 parent a056e51 commit 940800d

File tree

7 files changed

+187
-28
lines changed

7 files changed

+187
-28
lines changed

data/feedback.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[
22
{
3-
"name": "Frank",
3+
"name": "John",
44
"email": "[email protected]",
55
"title": "Best Meetup Ever",
66
"message": "I really love this meetup. Please don't let it end."

package-lock.json

Lines changed: 74 additions & 9 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,12 @@
1111
"author": "Daniel Khan",
1212
"license": "MIT",
1313
"dependencies": {
14+
"body-parser": "^1.20.2",
1415
"cookie-session": "^2.0.0",
1516
"ejs": "^3.1.9",
16-
"express": "^4.18.2"
17+
"express": "^4.18.2",
18+
"express-validator": "^7.0.1",
19+
"http-errors": "^2.0.0"
1720
},
1821
"devDependencies": {
1922
"eslint": "^8.48.0",

routes/feedback.js

Lines changed: 54 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,64 @@
11
const express = require('express');
2-
2+
const { check, validationResult } = require('express-validator');
33
const router = express.Router();
44
module.exports = (params) => {
55
const { feedbackService } = params;
66

7-
router.get('/', async (req, res) => {
8-
const feedback = await feedbackService.getList();
9-
return res.json(feedback);
7+
router.get('/', async (req, res, next) => {
8+
try {
9+
const feedback = await feedbackService.getList();
10+
11+
const errors =req.session.feedback? req.session.feedback.errors:false
12+
13+
return res.render('layout', {
14+
pageTitle: 'Feedback',
15+
template: 'feedback',
16+
feedback,
17+
});
18+
} catch (error) {
19+
return next(error);
20+
}
1021
});
1122

12-
router.post('/', (req, res) => res.send('Feeback form posted'));
23+
router.post(
24+
'/',
25+
[
26+
check('name')
27+
.trim()
28+
.isLength({ min: 3 })
29+
.escape()
30+
.withMessage('A name is required'),
31+
check('email')
32+
.trim()
33+
.isEmail()
34+
.normalizeEmail()
35+
.withMessage('A valid email address is required'),
36+
check('title')
37+
.trim()
38+
.isLength({ min: 3 })
39+
.escape()
40+
.withMessage('A title is required'),
41+
check('message')
42+
.trim()
43+
.isLength({ min: 5 })
44+
.escape()
45+
.withMessage('A message is required')
46+
],
47+
(req, res) => {
48+
const errors = validationResult(req)
49+
50+
if(!errors.isEmpty()){
51+
req.session.feedback ={
52+
errors: errors.array(),
53+
}
54+
return res.redirect('/feedback')
55+
}
56+
57+
res.send('Feedback form posted');
58+
}
59+
);
1360

1461
return router;
1562
};
63+
// const feedback = await feedbackService.getList();
64+
// return res.json(feedback);

routes/index.js

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,19 @@ const router = express.Router();
77
module.exports = (params) => {
88
const { speakerService } = params;
99

10-
router.get('/', async (req, res) => {
10+
router.get('/', async (req, res, next) => {
11+
try{
1112
const artwork = await speakerService.getAllArtwork();
1213
const topSpeakers = await speakerService.getList();
13-
res.render('layout', { pageTitle: 'Welcome', template: 'index', topSpeakers, artwork });
14+
return res.render('layout',
15+
{ pageTitle: 'Welcome',
16+
template: 'index',
17+
topSpeakers,
18+
artwork });
19+
}catch(error){
20+
return next(error)
21+
}
22+
1423
});
1524
router.use('/speakers', speakersRoute(params));
1625
router.use('/feedback', feedbackRoute(params));

routes/speakers.js

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,34 @@ const router = express.Router();
44
module.exports = (params) => {
55
const { speakerService } = params;
66

7-
router.get('/', async (req, res) => {
8-
const speakers = await speakerService.getList();
9-
const artwork = await speakerService.getAllArtwork();
10-
res.render('layout', { pageTitle: 'Speakers', template: 'speakers', speakers, artwork });
7+
router.get('/', async (req, res, next) => {
8+
try {
9+
const speakers = await speakerService.getList();
10+
const artwork = await speakerService.getAllArtwork();
11+
return res.render('layout', {
12+
pageTitle: 'Speakers',
13+
template: 'speakers',
14+
speakers,
15+
artwork });
16+
} catch (error) {
17+
return next(error)
18+
}
1119
});
1220

13-
router.get('/:shortname', async (req, res) => {
14-
const speaker = await speakerService.getSpeaker(req.params.shortname);
15-
const artwork = await speakerService.getArtworkForSpeaker(req.params.shortname);
16-
res.render('layout', { pageTitle: 'Speakers', template: 'speakers-detail', speaker, artwork });
21+
router.get('/:shortname', async (req, res, next) => {
22+
try {
23+
const speaker = await speakerService.getSpeaker(req.params.shortname);
24+
const artwork = await speakerService.getArtworkForSpeaker(req.params.shortname);
25+
return res.render('layout', {
26+
pageTitle: 'Speakers',
27+
template: 'speakers-detail',
28+
speaker,
29+
artwork
30+
});
31+
} catch (error) {
32+
return next(error)
33+
}
34+
1735
});
1836
return router;
1937
};

server.js

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
const express = require('express');
22
const path = require('path');
33
const cookieSession = require('cookie-session');
4+
const createError = require('http-errors')
45
const routes = require('./routes');
5-
6+
const bodyParser = require('body-parser')
67
const FeedbackService = require('./services/FeedbackService');
78
const SpeakerService = require('./services/SpeakerService');
89

@@ -19,12 +20,15 @@ app.use(cookieSession({
1920
keys: ['Ghjkl12345','rgdfggdffssffggfffssss']
2021
}));
2122

23+
app.use(bodyParser.urlencoded({ extended: true }))
24+
2225
app.set('view engine', 'ejs');
2326
app.set('views', path.join(__dirname, './views'));
2427
app.locals.siteName ='ROUX Meetups'
2528
app.use(express.static(path.join(__dirname,'./static')));
26-
app.use(async(req, res, next)=>{
2729

30+
31+
app.use(async(req, res, next)=>{
2832
try {
2933
const names = await speakerService.getNames()
3034
res.locals.speakerNames = names
@@ -42,7 +46,18 @@ app.use('/',routes({
4246
})
4347
);
4448

49+
app.use((req,res, next)=>{
50+
return next(createError(404,"Page not found"))
51+
})
4552

53+
app.use((err, req, res, next)=>{
54+
res.locals.message= err.message
55+
console.error(err)
56+
const status = err.status || 500
57+
res.locals.status = status
58+
res.status(status)
59+
res.render('error')
60+
})
4661

4762
app.listen(port, () => {
4863
console.log(`Server running on port${port}`);

0 commit comments

Comments
 (0)