let querystring = require('querystring') let stream_buffers = require('stream-buffers') let XDate = require('xdate') return async env => { 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:', JSON.stringify(query)) //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() await env.site.ensure_dir('/_logs') env.site.modify_json( `/_logs/feedback_${date.toUTCString('yyyyMMdd')}.json`, [], async result => {result.value.push(query)} ) // send email (asynchronously) ;(await env.site.get_emailjs('/_config/email_feedback.json')).send( { text: query.message, from: 'Feedback form ', to: 'Nick Downing ', subject: 'Page: ' + query.page }, (err, message) => { if (err) console.error(err.stack || err.message) else console.log('sent feedback email:', query.page) } ) } env.site.serve(env, 200, Buffer.from('Thanks!'), 'feedback_form.html.jst') }