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

升级koa-router@13.0.1后async fs.promises.readFile报错,低版本正常

Koa-router升级后路由正则引发的异常解决

问题根源

你遇到的异常本质是koa-router@13.0.1升级了依赖的path-to-regexp库到v7+版本,旧版的路由参数正则写法不再兼容,导致路由解析失败,进而触发了看似和readFile相关的错误(实际错误栈指向pathToRegexpError,说明问题出在路由定义上)。

koa-router@12及之前版本用的path-to-regexp版本较低,支持松散的参数正则写法;但v13对路由语法的校验更严格,旧写法会被判定为无效正则。

错误的路由写法(旧版兼容,新版失效)

const Router = require("@koa/router");

router.get(
  "/pkg/get-details/:labelSerialNumber(\d-[0-9A-Za-z]{12})/",
  // 你的处理逻辑
);

两种修正方案

方案1:修正字符串路由的正则格式

需要给参数里的正则额外套一层括号,同时转义字符串中的反斜杠(JavaScript字符串里\d必须写成\\d才能被正确识别为正则的数字匹配符):

const Router = require("@koa/router");

router.get(
  "/pkg/get-details/:labelSerialNumber((\\d-[0-9A-Za-z]{12}))/",
  // 你的处理逻辑
);

方案2:直接使用正则字面量定义路由

这种方式无需处理字符串转义,更直观:

const Router = require("@koa/router");

router.get(
  /^\/pkg\/get-details\/(\d-[0-9A-Za-z]{12})\/$/,
  (ctx) => {
    // 通过ctx.params[0]获取匹配到的labelSerialNumber
    const labelSerialNumber = ctx.params[0];
    // 后续业务逻辑
  }
);

验证说明

修正路由定义后,koa-router@13.0.1就能正常解析路由规则,不会再触发pathToRegexpError。你原本的文件哈希生成逻辑(包括calculateFileSHA256Hash函数和Promise.all的调用)本身没有问题,之前的异常只是路由解析失败引发的连锁反应。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 01:11:00