Core synchronous queue with an example worker
This commit is contained in:
91
app.js
Normal file
91
app.js
Normal file
@@ -0,0 +1,91 @@
|
||||
const dotenv = require('dotenv')
|
||||
const compression = require('compression')
|
||||
const express = require('express')
|
||||
const morgan = require('morgan')
|
||||
const bodyParser = require('body-parser')
|
||||
const path = require('path')
|
||||
const rfs = require('rotating-file-stream')
|
||||
const cors = require('cors')
|
||||
const errorhandler = require('errorhandler')
|
||||
const statusCodes = require('http-status-codes').StatusCodes
|
||||
const createError = require('http-errors')
|
||||
|
||||
const apiRouter = require('./routes')
|
||||
|
||||
// load .env config file
|
||||
dotenv.config()
|
||||
|
||||
// main app file
|
||||
const app = express()
|
||||
|
||||
// create a rotating write stream
|
||||
const accessLogStream = rfs.createStream('access.log', {
|
||||
interval: '1d', // rotate daily
|
||||
path: path.join(__dirname, 'log')
|
||||
})
|
||||
|
||||
// setup the file logger
|
||||
app.use(morgan('common', { stream: accessLogStream }))
|
||||
|
||||
// setup the console logger
|
||||
if (process.env.NODE_ENV === 'development') {
|
||||
// [debug]
|
||||
app.use(morgan('dev'))
|
||||
} else {
|
||||
// [production]
|
||||
app.use(morgan('dev', {
|
||||
skip: function (req, res) { return res.statusCode < 400 }
|
||||
}))
|
||||
}
|
||||
|
||||
// be proxy aware
|
||||
app.enable('trust proxy')
|
||||
|
||||
// cross-origin resource sharing
|
||||
app.use(cors())
|
||||
|
||||
// json middleware
|
||||
app.use(bodyParser.json())
|
||||
|
||||
// healthcheck (can be used for heart-beat)
|
||||
app.get('/status', (req, res) => {
|
||||
res.status(200).end()
|
||||
});
|
||||
app.head('/status', (req, res) => {
|
||||
res.status(200).end()
|
||||
});
|
||||
|
||||
// routes
|
||||
app.use('/api', apiRouter)
|
||||
|
||||
// 404 middleware
|
||||
app.use((req, res, next) => {
|
||||
next(createError(statusCodes.NOT_FOUND))
|
||||
})
|
||||
|
||||
// error handling
|
||||
app.use((err, req, res, next) => {
|
||||
/* Handle 401 */
|
||||
if (err.status === statusCodes.UNAUTHORIZED) {
|
||||
return res
|
||||
.status(err.status)
|
||||
.send({ message: err.message })
|
||||
.end()
|
||||
}
|
||||
return next(err)
|
||||
})
|
||||
if (process.env.NODE_ENV !== 'development') {
|
||||
app.use((err, req, res, next) => {
|
||||
res.status(err.status || 500)
|
||||
res.json({
|
||||
errors: {
|
||||
message: err.message,
|
||||
},
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
// start the server
|
||||
app.listen(process.env.PORT, process.env.HOST)
|
||||
|
||||
console.log('service started on port ' process.env.HOST + ':' + process.env.PORT)
|
||||
Reference in New Issue
Block a user