-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.js
More file actions
107 lines (93 loc) · 2.53 KB
/
index.js
File metadata and controls
107 lines (93 loc) · 2.53 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
/**
* Created by patrykmazurkiewicz on 15/06/2017.
*/
const express = require('express');
const http = require('http');
const bodyParser = require('body-parser');
const morgan = require('morgan');
const mongoose = require('mongoose');
const rateLimit = require('express-rate-limit');
const helmet = require('helmet');
const { execute, subscribe } = require('graphql');
const { graphqlExpress, graphiqlExpress } = require('apollo-server-express');
const { SubscriptionServer } = require('subscriptions-transport-ws');
const graphQl = require('./graphql');
const initFirebase = require('./services/firebaseApi').init;
const saveBeerWords = require('./services/firebaseApi').saveBeerWords;
const router = require('./router');
const websockets = require('./controllers/ws').websockets;
const getFirstTweetId = require('./services/dataScraping').getFirstTweet;
const scrape = require('./services/dataScraping').scrape;
const config = require('./config');
process.setMaxListeners(0);
const limiter = rateLimit({
windowMs: 60 * 1000,
max: 20,
});
//app
const app = express();
app.set('trust proxy', 1);
app.use(morgan('combined'));
app.use(helmet());
app.use(limiter);
app.use((req, res, next) => {
res.header('Access-Control-Allow-Origin', '*');
res.header(
'Access-Control-Allow-Headers',
'Origin, X-Requested-With, Content-Type, Accept',
);
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
next();
});
app.use(bodyParser.json({ type: '*/*', limit: '10000kb' }));
//db
if (process.env.NODE_ENV === 'docker') {
mongoose.connect('mongodb://mongo:auth/public-api');
} else if (process.env.NODE_ENV === 'local') {
mongoose.connect('mongodb://localhost/public-api');
} else {
mongoose.connect(config.mLabMyApi, {
useMongoClient: true,
});
}
router(app);
//server
const PORT = process.env.PORT || 3090;
const server = http.createServer(app);
//firebase
initFirebase();
//websocket
websockets(server);
//scraping
// getFirstTweetId(config.scrapingTargetUrl);
setInterval(() => {
scrape('craft beer', 1, saveBeerWords);
}, config.scrapingInterval);
server.listen(PORT);
//graphql
SubscriptionServer.create(
{
schema: graphQl.schema,
execute,
subscribe,
},
{
server: server,
path: '/graphqlsubs',
},
);
app.use(
'/graphql',
graphqlExpress({
schema: graphQl.schema,
}),
);
app.get(
'/graphiql',
graphiqlExpress({
endpointURL: '/graphql',
subscriptionsEndpoint: `wss://api.codebooyah.com/graphqlsubs`,
}),
);
graphQl.listenForNewRank();
console.log('API listen on port: ', PORT);