You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Deno Watcher重启时遭遇AddrInUse错误求助

解决Deno Watch重启时端口占用(AddrInUse: os error 10048)的问题

问题场景

Windows 11系统下,使用Deno 1.28.0执行deno run --allow-all --watch app.ts启动Express项目,修改保存app.ts后,Deno Watcher触发重启时抛出AddrInUse错误,提示端口8000被占用;再次保存文件,错误仍会重复出现。

原因分析

Deno的Watcher在重启进程时,旧的Express服务器进程未被彻底终止(受Deno Node.js兼容层特性影响),导致8000端口始终被旧进程占用,新进程无法绑定该端口。

解决方案

方案1:添加优雅关闭逻辑(推荐)

修改app.ts,保存Express服务器实例,并监听Deno的终止信号,在进程退出前主动关闭服务器,确保端口被释放:

import express, { Express, Request, Response } from "npm:express@4.18";
import { v4 as uuidv4 } from 'npm:uuid@9.0.0';
const app: Express = express();

app.use("/", (_req: Request, res: Response) => {
    res.send(`uuid: ${uuidv4()}.`);
})

// 保存server实例
const server = app.listen(8000, () => {
    console.log("App Running: http://localhost:8000");
});

// 监听终止信号,优雅关闭服务器
['SIGINT', 'SIGTERM'].forEach(signal => {
  Deno.addSignalListener(signal, () => {
    console.log(`收到${signal}信号,正在关闭服务器...`);
    server.close(() => {
      console.log('服务器已关闭');
      Deno.exit(0);
    });
  });
});

方案2:使用Deno不稳定特性强制终止旧进程

启动命令添加--unstable-kill-on-close参数(Deno 1.20及以上版本支持),该参数会在Watcher重启时强制杀死旧进程,自动释放端口:

deno run --allow-all --watch --unstable-kill-on-close app.ts

方案3:手动释放端口(临时解决)

如果需要快速临时解决,可手动杀死占用8000端口的进程:

  1. 查找占用端口的进程ID(PID):
netstat -ano | findstr :8000
  1. 杀死对应进程(将<PID>替换为上一步获取的进程ID):
taskkill /F /PID <PID>

内容的提问来源于stack exchange,提问作者ShCc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 16:25:23