Koa2 & Nodejs接口返回JSON时出现404(Not Found)错误求解
排查Koa2接口返回404错误的解决方案
咱们一步步来定位和解决你遇到的问题:
1. 先确认路由是否正确挂载到Koa应用
这是404错误最常见的原因之一——你的/reqwords路由可能根本没被Koa识别到。
你需要确保:
- 已经创建了Koa Router实例,并且把这个POST路由添加到Router上
- 最后通过
app.use(router.routes())和app.use(router.allowedMethods())将路由挂载到Koa应用中
举个正确的挂载示例:
const Koa = require('koa'); const Router = require('koa-router'); const app = new Koa(); const router = new Router(); // 你的POST路由要放在Router实例上 router.post('/reqwords', async (ctx) => { // 你的业务逻辑代码 }); // 必须挂载路由到Koa应用 app.use(router.routes()); // 处理OPTIONS请求、HTTP方法不匹配等场景(可选但推荐) app.use(router.allowedMethods()); app.listen(3000, () => { console.log('Koa app running on http://localhost:3000'); });
如果跳过了挂载步骤,Koa找不到对应的路径,自然会返回404。
2. 修复异步处理逻辑的问题
你的代码里在async中间件中使用了.then(),但没有等待这个异步操作完成——Koa会在async函数执行完(还没走到.then里的代码)就结束请求,此时ctx.body还没被设置,Koa会默认返回404(因为没有合法的响应内容)。
正确的做法是用await替代.then(),配合try/catch捕获错误,确保异步操作完成后再设置响应:
router.post('/reqwords', async (ctx) => { try { let goroClient = new GOROClient(); // 用await等待send方法的异步结果 const res = await goroClient.send({ /* 你的参数 */ }); const { Code } = res; if (Code === 'OK') { console.log(res); ctx.body = res; } else { // 处理Code非OK的情况,建议设置合适的HTTP状态码 ctx.status = 400; ctx.body = res; } } catch (err) { console.log(err); // 服务器错误返回500状态码 ctx.status = 500; ctx.body = err; } });
3. 验证请求的路径和方法是否匹配
- 检查前端请求的路径是否是
/reqwords,有没有拼写错误(比如大小写、多余的斜杠) - 确认请求方法是POST,而不是GET/PUT等其他方法
- 可以在路由开头加一行日志,验证是否进入了这个路由:
如果控制台没输出,说明路由没匹配到,回到第一步检查挂载。router.post('/reqwords', async (ctx) => { console.log('已进入/reqwords路由'); // 查看控制台是否输出这条日志 // 后续业务逻辑 });
4. 确认端口匹配
确保前端请求的端口和Koa应用监听的端口一致(比如Koa监听3000,前端要请求http://localhost:3000/reqwords,而不是其他端口)。
内容的提问来源于stack exchange,提问作者yupang
相关产品推荐
相关产品推荐

