-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
116 lines (93 loc) · 2.77 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
'use strict';
// load npm modules
const express = require('express');
const morgan = require('morgan');
const bodyParser = require('body-parser')
const app = express();
const env = process.env.NODE_ENV || 'development';
// set the port
app.set('port', process.env.PORT || 5000);
// my own modular mongoose connection method and callbacks
const connect = require('./src/utils').connect;
const onErr = require('./src/utils').onErr;
const onceConnected = require('./src/utils').onceConnected;
// connecting to mongodb...
const db = connect();
// if error in connection...
db.on("error", function(err){
onErr(err);
});
// if connected and all is good...
db.once("open", function(){
onceConnected();
});
// morgan gives us http request logging
app.use(morgan('dev'));
// all routes can use body-parser to parse json formatted data sent in req.body
// so req.body must be an object with key/value properties
app.use(bodyParser.json())
if (env === 'development'){
/* import insertData methods */
const initCourses = require('./src/seed-data/insertData.js').initCourses;
const initReviews = require('./src/seed-data/insertData.js').initReviews;
const initUsers = require('./src/seed-data/insertData.js').initUsers;
// test if seedData has been inserted into db.course-api
// if not insert data, logs to console on err or success
initCourses();
initReviews();
initUsers();
}
// send a friendly greeting for the root route
app.get('/', (req, res) => {
res.json({
message: 'Welcome to the Course Review API'
});
});
// importing user and course router modules
const userRoutes = require('./src/routes/users.js');
const courseRoutes = require('./src/routes/courses.js');
// tells express app to use these router modules
app.use(courseRoutes);
app.use(userRoutes);
// tells express app which paths to use with which routes
app.use('/api/courses', courseRoutes);
app.use('/api/courses/:id', courseRoutes);
app.use('/api/users', userRoutes);
// send 404 if no other route matched and no error once processing a route
app.use((req, res) => {
res.status(404)
res.json({
message: 'Route Not Found',
})
})
// global error handler
// for an err to get here just need to next(err) from any route
app.use((err, req, res, next) => {
if (err.name = 'MongoError'){
if (err.code == 11000){
res.status(400)
} else {
res.status(err.status || 400 );
}
if (env === 'development'){
res.json({
message: err.message,
details: err.stack
});
}
} else {
res.status(500);
if (env === 'development'){
res.json({
message: err.message,
status: 500,
details: err.stack
});
}
}
});
// start listening on our port
const server = app.listen(app.get('port'), () => {
console.log(`Express server is listening on port ${server.address().port}`);
});
module.exports = server;