Use jst_server.Problem everywhere, make /_lib/post_request.jst use jst_server's new...
[ndcode_site.git] / _lib / post_request.jst
index 484f1b9..1757f86 100644 (file)
@@ -1,70 +1,32 @@
+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,