let querystring = require('querystring') let stream_buffers = require('stream-buffers') let XDate = require('xdate') return async env => { let globals = await env.site.get_json('/_config/globals.json') let message if (env.request.method === 'POST') { let write_stream = new stream_buffers.WritableStreamBuffer() let data = new Promise( (resolve, reject) => { write_stream. on('finish', () => {resolve(write_stream.getContents())}). on('error', () => {reject()}) } ) env.request.pipe(write_stream) let query = querystring.parse((await data).toString()) console.log('received feedback form:', query.page) // save the form contents in a dated logfile, so that we can // recover manually if the email doesn't send for some reason date = new XDate() query.date = date.toUTCString() let transaction = await env.site.database.Transaction() ;( await ( await ( await ( await transaction.get({}) ).get('logs', {}) ).get(date.toUTCString('yyyyMMdd'), {}) ).get('feedback', []) ).push(transaction.json_to_logjson(query)) transaction.commit() // send email (asynchronously) let emailjs_feedback = await env.site.get_emailjs( '/_config/email_feedback.json' ) emailjs_feedback.send( { from: globals.feedback_from, to: globals.feedback_to, subject: 'Page: ' + query.page, text: query.message, }, (err, message) => { if (err) console.error(err.stack || err.message) else console.log('sent feedback email:', query.page) } ) message = 'Thanks!' } else message = 'Please POST.' env.site.serve(env, 200, Buffer.from(message), 'feedback.html.jst') }