1 let stream_buffers = require('stream-buffers')
3 return async (env, handler) => {
4 let Problem = await _require('/_lib/Problem.jst')
8 if (env.request.method !== 'POST') {
9 env.response.setHeader('Allow', 'POST')
12 `The endpoint "${env.parsed_url.path}" requires a POST request.`,
17 let write_stream = new stream_buffers.WritableStreamBuffer()
18 let data = new Promise(
19 (resolve, reject) => {
21 on('finish', () => {resolve(write_stream.getContents())}).
22 on('error', () => {reject()})
25 env.request.pipe(write_stream)
26 let arguments = JSON.parse((await data).toString())
27 console.log('endpoint', env.parsed_url.path, 'arguments', JSON.stringify(arguments))
29 result = await handler(...arguments)
30 if (result === undefined)
32 console.log('endpoint', env.parsed_url.path, 'result', JSON.stringify(result))
36 error instanceof Problem ?
40 'Internal server error',
42 (error.stack || error.message).toString()
46 console.log('endpoint', env.parsed_url.path, 'problem', problem.detail)
48 env.mime_type = 'application/problem+json; charset=utf-8'
56 detail: problem.detail,
57 status: problem.status
72 Buffer.from(JSON.stringify(result, null, 2) + '\n', 'utf-8'),