mock-server.mjs 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import http from 'node:http'
  2. const requestListener = (req, res) => {
  3. const endpoint = req.url
  4. switch (endpoint) {
  5. case '/file-with-content-disposition': {
  6. const fileName = `DALL·E IMG_9078 - 学中文 🤑`
  7. res.setHeader('Content-Disposition', `attachment; filename="ASCII-name.zip"; filename*=UTF-8''${encodeURIComponent(fileName)}`)
  8. res.setHeader('Content-Type', 'image/jpeg')
  9. res.setHeader('Content-Length', '86500')
  10. break
  11. }
  12. case '/file-no-headers':
  13. break
  14. case '/unknown-size': {
  15. res.setHeader('Content-Type', 'text/html; charset=UTF-8');
  16. res.setHeader('Transfer-Encoding', 'chunked');
  17. const chunkSize = 1e5;
  18. if (req.method === 'GET') {
  19. let i = 0;
  20. const interval = setInterval(() => {
  21. if (i >= 10) { // 1MB
  22. clearInterval(interval);
  23. res.end();
  24. return;
  25. }
  26. res.write(Buffer.from(Array.from({ length: chunkSize }, () => '1').join('')));
  27. res.write('\n');
  28. i++;
  29. }, 10);
  30. } else if (req.method === 'HEAD') {
  31. res.end();
  32. } else {
  33. throw new Error('Unhandled method')
  34. }
  35. }
  36. break;
  37. default:
  38. res.writeHead(404).end('Unhandled request')
  39. }
  40. res.end()
  41. }
  42. export default function startMockServer (host, port) {
  43. const server = http.createServer(requestListener)
  44. server.listen(port, host, () => {
  45. console.log(`Mock server is running on http://${host}:${port}`)
  46. })
  47. }
  48. // startMockServer('localhost', 4678)