+let jst_server = (await import('@ndcode/jst_server')).default
let stream_buffers = require('stream-buffers')
return async (env, handler) => {
- let Problem = await _require('/_lib/Problem.jst')
-
- let result
- try {
- if (env.request.method !== 'POST') {
- env.response.setHeader('Allow', 'POST')
- throw new Problem(
- 'Method not allowed',
- `The endpoint "${env.parsed_url.path}" requires a POST request.`,
- 405
- )
- }
-
- let write_stream = new stream_buffers.WritableStreamBuffer()
- let data = new Promise(
- (resolve, reject) => {
- write_stream.
- on('finish', () => {resolve(write_stream.getContents())}).
- on('error', () => {reject()})
- }
+ if (env.request.method !== 'POST') {
+ env.response.setHeader('Allow', 'POST')
+ throw new jst_server.Problem(
+ 'Method not allowed',
+ `The endpoint "${env.parsed_url.path}" requires a POST request.`,
+ 405
)
- env.request.pipe(write_stream)
- let args = JSON.parse((await data).toString('utf-8'))
- console.log('endpoint', env.parsed_url.path, 'args', JSON.stringify(args))
-
- result = await handler(...args)
- if (result === undefined)
- result = null
- console.log('endpoint', env.parsed_url.path, 'result', JSON.stringify(result))
}
- catch (error) {
- let problem =
- error instanceof Problem ?
- error :
- new Problem(
- // title
- 'Internal server error',
- // details
- (error.stack || error.message).toString()
- // status
- 500
- )
- console.log('endpoint', env.parsed_url.path, 'problem', problem.detail)
- env.mime_type = 'application/problem+json; charset=utf-8'
- env.site.serve(
- env,
- problem.status,
- Buffer.from(
- JSON.stringify(
- {
- title: problem.title,
- detail: problem.detail,
- status: problem.status
- },
- null,
- 2
- ) + '\n',
- 'utf-8'
- ),
- 'post_request.jst'
- )
- return
- }
+ 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 args = JSON.parse((await data).toString('utf-8'))
+ console.log('endpoint', env.parsed_url.path, 'args', JSON.stringify(args))
+
+ let result = await handler(...args)
+ if (result === undefined)
+ result = null
+ console.log('endpoint', env.parsed_url.path, 'result', JSON.stringify(result))
env.site.serve(
env,