server.js 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. #!/usr/bin/env node
  2. /* eslint-disable no-console */
  3. import http from 'node:http'
  4. import { fileURLToPath } from 'node:url'
  5. import { mkdir } from 'node:fs/promises'
  6. import formidable from 'formidable'
  7. const UPLOAD_DIR = new URL('./uploads/', import.meta.url)
  8. await mkdir(UPLOAD_DIR, { recursive: true })
  9. http
  10. .createServer((req, res) => {
  11. const headers = {
  12. 'Content-Type': 'application/json',
  13. 'Access-Control-Allow-Origin': '*',
  14. 'Access-Control-Allow-Methods': 'OPTIONS, POST, GET',
  15. 'Access-Control-Max-Age': 2592000, // 30 days
  16. /** add other headers as per requirement */
  17. }
  18. if (req.method === 'OPTIONS') {
  19. res.writeHead(204, headers)
  20. res.end()
  21. return
  22. }
  23. if (req.url === '/upload' && req.method.toLowerCase() === 'post') {
  24. // parse a file upload
  25. const form = formidable({
  26. keepExtensions: true,
  27. uploadDir: fileURLToPath(UPLOAD_DIR),
  28. })
  29. form.parse(req, (err, fields, files) => {
  30. res.writeHead(200, headers)
  31. if (err) {
  32. console.log('some error', err)
  33. res.write(JSON.stringify(err))
  34. } else {
  35. for (const {
  36. filepath,
  37. originalFilename,
  38. mimetype,
  39. size,
  40. } of files.files) {
  41. console.log('saved file', {
  42. filepath,
  43. originalFilename,
  44. mimetype,
  45. size,
  46. })
  47. }
  48. res.write(JSON.stringify({ fields, files }))
  49. }
  50. res.end()
  51. })
  52. }
  53. })
  54. .listen(9967, () => {
  55. console.log('server started')
  56. })