require('dotenv').config() const express = require('express') const app = express() const path = require('path') const mongo = require('mongodb') const MongoClient = mongo.MongoClient console.log('Starting with parameters:') const parameters = ['PORT', 'MONGO_SERVER', 'MONGO_DB'] parameters.forEach(parameter => console.log(`${parameter}=${process.env[parameter]}`)) app.listen(process.env.PORT, () => { console.log('Listening on ' + process.env.PORT) }) let db const mongoUrl = `mongodb://${process.env.MONGO_SERVER}:27017` MongoClient.connect(mongoUrl, { useNewUrlParser: true }).then(client => { db = client.db(process.env.MONGO_DB) console.log('Connected succesfully to server') }).catch(err => console.log(err)) app.use(function(req, res, next) { res.header('Access-Control-Allow-Origin', '*') res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept') next() }) app.get('/type/:type/startDate/:startDate/endDate/:endDate/sample/:sample', async (req, res) => { const startDate = new Date(req.params.startDate * 1000) const endDate = new Date(req.params.endDate * 1000) const sample = parseInt(req.params.sample) const query = { _id: { $gt: objectIdFromDate(startDate), $lt: objectIdFromDate(endDate) }, type: req.params.type, value: { $ne: NaN } } try { const docs = await db.collection('dht22').find(query).toArray() const sampledDocs = docs .filter((value, index) => index % sample === 0) .map(doc => { return { ...doc, date: dateFromObjectId(doc._id) } }) res.json(sampledDocs) } catch (err) { console.log(err) } }) function objectIdFromDate(date) { return mongo.ObjectId(Math.floor(date.getTime() / 1000).toString(16) + '0000000000000000') } function dateFromObjectId(objectId) { return Math.floor(mongo.ObjectId(objectId).getTimestamp().getTime() / 1000) } app.use(express.static(path.join(__dirname, '../dist'))) app.get('/*', function(req, res) { res.sendFile(path.join(__dirname, '../dist/index.html')) }) module.exports = app