example/server.js (67 lines of code) (raw):

/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ const express = require('express'); const bodyParser = require('body-parser'); const fs = require('fs'); const path = require('path'); const logDirectory = path.resolve(__dirname, '../logs'); const logPath = path.resolve(logDirectory, 'logs_' + (new Date()).getTime() + '.json'); try { fs.lstatSync(logDirectory); } catch (e) { fs.mkdirSync(logDirectory); // Create directory if it doesn't exist } const wStream = fs.createWriteStream(logPath); wStream.on('open', function () { wStream.write('['); }); let firstLog = true; const app = express(); app.set('port', process.env.PORT || 8000); app.use(function (req, res, next) { res.header('Access-Control-Allow-Origin', '*'); res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS'); res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization, Content-Length, X-Requested-With'); // intercept OPTIONS method if ('OPTIONS' == req.method) { res.sendStatus(200); } else { next(); } }); app.use(bodyParser.urlencoded({extended: true, limit: '100mb'})); app.use(bodyParser.json({limit: '100mb'})); app.use(bodyParser.text()) app.use('/build', express.static(path.join(__dirname, '/../build'))); app.use('/', express.static(__dirname)); app.set('view engine', 'jade'); app.use('/', express.static(__dirname)) app.get('/', function (req, res) { res.sendFile('index.html', { root: __dirname }); }); app.post('/', function (req, res) { const body = typeof req.body === "string" ? JSON.parse(req.body) : req.body console.log(body) let delimiter = ',\n\t'; if (firstLog) { wStream.write('\n\t'); firstLog = false; } else { wStream.write(delimiter); } const logLength = req.body.length - 1; body.forEach(function (log, i) { if (i === logLength) { delimiter = ''; } wStream.write(JSON.stringify(log) + delimiter); }); res.sendStatus(200); }); app.listen(app.get('port'), function () { console.log('UserAle Local running on port', app.get('port')); }); function closeLogServer () { wStream.end('\n]'); process.exit(); } process.on('SIGTERM', function () { closeLogServer(); }); process.on('SIGINT', function () { closeLogServer(); });