http.js 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. const http = require('http')
  2. const url = require('url')
  3. const fs = require('fs')
  4. const path = require('path')
  5. // const mime = require('mime')
  6. const mime = {
  7. map: {
  8. 'html': 'text/html',
  9. 'xhtml': 'application/xhtml+xml',
  10. 'xml': 'text/xml',
  11. 'js': 'application/javascript',
  12. 'wasm': 'application/wasm',
  13. 'map': 'magnus-internal/imagemap',
  14. 'css': 'text/css',
  15. 'png': 'image/png',
  16. 'jpg': 'image/jpeg',
  17. 'jpeg': 'image/jpeg',
  18. 'gif': 'image/gif',
  19. 'ico': 'image/vnd.microsoft.icon'
  20. },
  21. getType: function (ext) {
  22. let conType = this.map[ext]
  23. return conType || 'text/plain'
  24. }
  25. }
  26. const httpServer = http.createServer()
  27. httpServer.on('request', (req, res) => {
  28. console.log(`[receive request] ${req.method} ${req.url}`)
  29. const urlJson = url.parse(req.url)
  30. let { pathname } = urlJson
  31. if (pathname === '/') pathname += 'index.html'
  32. let ext = pathname.split('.').pop()
  33. // all
  34. res.setHeader('Cross-Origin-Resource-Policy', 'cross-origin')
  35. res.setHeader('Cross-Origin-Embedder-Policy', 'require-corp')
  36. res.setHeader('Cross-Origin-Opener-Policy', 'same-origin')
  37. // just page file
  38. // if (ext === 'html' || ext === 'htm' || ext === 'xhtml' || ext === 'js') {
  39. // res.setHeader('Cross-Origin-Embedder-Policy', 'require-corp')
  40. // res.setHeader('Cross-Origin-Opener-Policy', 'same-origin')
  41. // }
  42. let contentType = mime.getType(ext)
  43. res.setHeader('Content-Type', contentType)
  44. fs.readFile(path.resolve(__dirname, pathname.substr(1)), (err, data) => {
  45. if (err) {
  46. res.writeHead(404)
  47. res.end('Not found.')
  48. } else {
  49. res.writeHead(200)
  50. res.end(data)
  51. }
  52. })
  53. })
  54. const PORT = 9000
  55. httpServer.listen(PORT, () => {
  56. console.log(`Server running at http://localhost:${PORT}`)
  57. })