You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Koa.js接口请求返回404错误求助(框架新手)

嘿,刚接触Koa就碰到404确实有点闹心,我结合你的情况梳理几个常见的排查方向,帮你定位问题:

Koa.js接口返回404的排查方案

1. 先确认路由有没有正确挂载到Koa实例

你写的这份路由代码,得在项目的主入口文件(比如app.js)里通过app.use()挂载才能生效,要是忘了这一步,Koa根本不知道有这个路由存在,自然返回404。举个正确的挂载例子:

const Koa = require('koa');
const collabRouter = require('./你的路由文件路径');
const app = new Koa();

// 必须挂载路由,还要加上allowedMethods处理响应头
app.use(collabRouter.routes()).use(collabRouter.allowedMethods());

另外还要注意挂载顺序,要是把路由放在错误处理、提前返回响应的中间件之后,路由也不会被执行到。

2. 检查路由路径和请求URL是否完全匹配

Koa的路由匹配是严格对应的,比如你路由定义的是router.get('/api/collabs', ...),那请求必须是GET /api/collabs——多一个末尾斜杠、少个前缀、大小写不对,都会匹配失败返回404。

3. 排查认证中间件的潜在问题

从你代码里引入的jwtcookie来看,路由大概率加了认证逻辑。要是认证中间件里出错,比如没拿到token就直接返回404(而不是正确的401未授权),就会误导你以为是路由不存在。比如这种错误写法:

const authMiddleware = async (ctx, next) => {
  const token = ctx.cookies.get(JWT_COOKIE_NAME);
  if (!token) {
    // 错误:应该返回401,却返回了404
    ctx.status = 404;
    return;
  }
  // 验证token逻辑...
  await next();
};

可以先临时注释掉认证中间件,测试路由是否能正常返回,排除认证逻辑的干扰。

4. 确认路由库的版本和语法正确

如果你用的是Koa2推荐的@koa/router,要确保路由定义的语法没问题:

const Router = require('@koa/router');
// 可以加前缀统一管理路由路径
const router = new Router({ prefix: '/api' });

router.get('/collabs', async (ctx) => {
  ctx.body = await collabRepo.getCollabs();
});

module.exports = router;

要是用的旧版koa-router,语法会略有不同,得对应版本调整。

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

火山引擎 最新活动