Files
sensor-web-v2/server/index.js
2019-07-01 21:17:33 +02:00

65 lines
2.0 KiB
JavaScript

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')))
module.exports = app