-
Notifications
You must be signed in to change notification settings - Fork 0
/
server.js
66 lines (57 loc) · 1.66 KB
/
server.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
const next = require('next');
const { createServer } = require('http');
const appInsights = require('applicationinsights');
const initAppInsights = (instrumentationKey) => {
if (!instrumentationKey) {
return false;
}
appInsights
.setup(instrumentationKey)
.setAutoCollectConsole(true, true)
.setSendLiveMetrics(true)
.start();
return true;
};
const startTime = Date.now();
const env = process.env.APP_ENV || process.env.NODE_ENV || 'production';
const useAppInsights = initAppInsights(process.env.NEXT_PUBLIC_APPINSIGHTS_INSTRUMENTATIONKEY);
const serverConfig = {
hostname: process.env.HOSTNAME || 'localhost',
port: process.env.PORT || 3000,
dev: env === 'development',
dir: '.',
quiet: false
};
const app = next(serverConfig);
const handleNextRequests = app.getRequestHandler();
app.prepare().then(() => {
createServer(async (req, res) => {
if (useAppInsights) {
appInsights.defaultClient.trackNodeHttpRequest({
request: req,
response: res
});
}
try {
await handleNextRequests(req, res);
} catch (err) {
console.error('Error occurred handling', req.url, err);
res.statusCode = 500;
res.end('internal server error');
}
})
.once('error', (err) => {
console.error(err);
process.exit(1);
})
.listen(serverConfig.port, serverConfig.hostname, () => {
if (useAppInsights) {
const duration = Date.now() - startTime;
appInsights.defaultClient.trackMetric({
name: 'server startup time',
value: duration
});
}
console.log(`Ready on http://${serverConfig.hostname}:${serverConfig.port}`);
});
});