-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathapp.js
More file actions
164 lines (116 loc) · 3.54 KB
/
app.js
File metadata and controls
164 lines (116 loc) · 3.54 KB
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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
const express = require('express')
const mongoose = require('mongoose')
const morgan = require('morgan')
const flash = require('connect-flash');
const session = require('express-session');
const passport = require('passport');
const fetch = require('cross-fetch');
require('dotenv').config()
const app = express();
require('./config/passport')(passport);
//app.use(morgan('tiny')); // to view logs
//--------Connecting Mongo DB-------//
let url = require('./config/db')
//------View Engine------//
app.set('view engine', 'ejs')
//-----Static folder------//
app.use('/static', express.static('static'))
//-----Body Parser-----//
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
//----express-session -----//
app.use(
session({
secret: 'secret',
resave: true,
saveUninitialized: true
})
);
//------Passport middleware------//
app.use(passport.initialize());
app.use(passport.session());
//------Connect flash------//
app.use(flash());
//-----Global variables for flash--------//
app.use(function(req, res, next) {
res.locals.success_msg = req.flash('success_msg');
res.locals.error_msg = req.flash('error_msg');
res.locals.error = req.flash('error');
next();
});
let cases = require('./models/covid');
//----------Fetching data from api and saving to MongoDB-----//
async function savedata(url,country) {
try {
const res = await fetch(url);
if (res.status >= 400) {
throw new Error("Bad response from server");
}
const data = await res.json();
let c1 = new cases({
name: country,
confirmed: data.All.confirmed,
death: data.All.deaths,
})
c1.save(err => {
if (err) {
console.log("Cannot Save");
}
else {
console.log("Saved");
}
});
} catch (err) {
console.error(err);
}
}
//------------Will fetch data from api only once a day----------//
var no = 0;
app.use(async function (req, res, next) {
if (no == 0) {
try {
const records = await cases.find();
if (records.length == 0) {
console.log("no records");
savedata('https://covid-api.mmediagroup.fr/v1/cases?country=India', 'India'); // Caching the data from api
savedata('https://covid-api.mmediagroup.fr/v1/cases?country=Global', 'Global');
}
else {
console.log("Lots of records");
const r1 = await cases.find({ name: 'India' });
//console.log(r1);
if (r1[0].published_date == false) {
let d1 = await cases.deleteOne({ name: "India" });
savedata('https://covid-api.mmediagroup.fr/v1/cases?country=India', 'India');
// console.log("Removed India");
}
const r2 = await cases.find({ name: 'Global' });
//console.log(r2);
if (r2[0].published_date == false) {
let d2 = await cases.deleteOne({ name: "Global" });
savedata('https://covid-api.mmediagroup.fr/v1/cases?country=Global', 'Global');
// console.log("Global Removed");
}
}
} catch (err) {
console.log("Error in try-catch");
}
no = 1;
}
next();
})
//-------Routes------//
app.use('', require('./routes/login'));
app.use('/news', require('./routes/news'));
//-----404 error page------//
app.use(function(req, res, next) {
res.status(404);
// respond with html page
if (req.accepts('html')) {
res.render('404');
return;
}
});
//-----Server----//
const PORT = process.env.PORT || 3000;
app.listen(PORT, console.log(`Running on port ${PORT}`));