server.js 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. const http = require('http');
  2. const localtunnel = require('localtunnel');
  3. // const debug = require('debug')('localtunnel:client');
  4. const server = http.createServer((req, res) => {
  5. console.log(`收到请求: ${req.method} ${req.url}`); // 添加请求日志
  6. res.statusCode = 200;
  7. res.setHeader('Content-Type', 'text/plain');
  8. res.end('Hello, World!');
  9. });
  10. const port = 9000;
  11. async function createTunnel() {
  12. try {
  13. const tunnel = await localtunnel({
  14. port: port,
  15. host: 'https://pre.d8d.fun',
  16. // subdomain: 'simple-js-line-f9s-gudz'
  17. });
  18. console.log(`隧道已创建: ${tunnel.url}`);
  19. // 添加更多事件监听
  20. tunnel.on('request', (info) => {
  21. console.log('隧道收到请求:', info);
  22. });
  23. tunnel.on('error', err => {
  24. console.error('隧道错误:', err);
  25. // 尝试重新连接
  26. setTimeout(createTunnel, 1000);
  27. });
  28. tunnel.on('close', () => {
  29. console.log('隧道关闭 - 尝试重新连接');
  30. // 隧道关闭时自动重连
  31. setTimeout(createTunnel, 1000);
  32. });
  33. tunnel.on('connect', () => {
  34. console.log('隧道已连接');
  35. });
  36. return tunnel;
  37. } catch (err) {
  38. console.error('创建隧道失败:', err);
  39. // 失败后延迟重试
  40. setTimeout(createTunnel, 1000);
  41. }
  42. }
  43. // 启动 HTTP 服务器
  44. server.listen(port, async () => {
  45. console.log(`本地服务器运行在 http://localhost:${port}/`);
  46. // 创建隧道并保持连接
  47. let tunnel = await createTunnel();
  48. // 优雅退出
  49. process.on('SIGINT', () => {
  50. if (tunnel) {
  51. tunnel.close();
  52. }
  53. server.close(() => {
  54. console.log('服务器已关闭');
  55. process.exit(0);
  56. });
  57. });
  58. });
  59. // 处理未捕获的异常
  60. process.on('uncaughtException', (err) => {
  61. console.error('未捕获的异常:', err);
  62. });
  63. process.on('unhandledRejection', (err) => {
  64. console.error('未处理的 Promise 拒绝:', err);
  65. });