app.js
Rama master · réplica de lectura del repositorio original.
const express = require('express')
, config = require('./config/config')
, fs = require('fs')
, mongoose = require('mongoose')
, log = require('./config/log')()
let isFirstConnect = true
if (!config.secret) {
console.error('Missing required environment variable ANCHR_SECRET.')
process.exit(1)
}
function connect(success, error) {
function onConnectFailed(err) {
setTimeout(() => { error() }, 0)
console.error(err)
throw new Error(`unable to connect to database at ${config.db}`)
}
log.default('Attempting to connect to database ...')
mongoose.set('strictQuery', true)
mongoose.connect(config.db, {
connectTimeoutMS: 3000,
serverSelectionTimeoutMS: 9000,
})
.then(() => {
log.default('Successfully established database connection.')
})
.catch(onConnectFailed)
const db = mongoose.connection
db.on('error', onConnectFailed)
db.on('disconnected', () => console.warn('Database disconnected.'))
db.on('connected', () => {
if (isFirstConnect) {
isFirstConnect = false
return success()
}
console.log('Database reconnected.')
})
}
function run() {
const models = fs.readdirSync(`${config.root}/app/models`).filter((f) => {
return f.endsWith('.js')
})
models.forEach((model) => {
require(`${config.root}/app/models/${model}`)
})
const app = express()
require('./config/express')(app, config)
app.listen(config.port, config.addr, () => {
log.default(`Express server listening on ${config.addr}:${config.port}`)
})
}
connect(run, () => {
process.exit(1)
})