最简Express测试路由返回404错误问题求助
问题排查与解决
核心原因
你在app.js中定义了测试用的/test路由,但没有将对应的Router实例挂载到Express应用上,导致Express无法识别这个路由请求,最终返回404。
看你app.js里的这段代码:
// For testing purpose const routes = express.Router(); routes.get('/test', async(req, res, next) => { console.log("test"); res.send("test"); });
你创建了routes这个Router并添加了/test接口,但后续没有通过app.use()把它注册到应用中,所以这个路由完全没被加入到Express的路由匹配系统里。
解决方案
在app.js中,把测试路由的Router挂载到Express应用上,注意要放在404中间件之前(否则会被404拦截)。
修改app.js,在注册完业务路由之后、404中间件之前添加以下代码:
// 挂载测试路由 app.use('/', routes);
如果希望给测试路由加上前缀(比如/api/test),可以改成:
app.use('/api', routes);
此时访问地址就变成http://localhost:4000/api/test。
额外检查点
为了确保万无一失,你还可以确认以下几点:
- 检查
.env文件中的NODE_LOCAL_PORT是否设置为4000,HOST是否为localhost,避免访问地址端口/主机错误。 - 如果
PUBLIC_URL环境变量有值(比如/my-app),业务路由会挂载在/my-app/api/...下,但测试路由因为是直接挂载到/,所以访问http://localhost:4000/test是正确的,不需要加PUBLIC_URL前缀。 - 确保所有路由注册都在404中间件
app.use((req,res,next) => { res.sendStatus(404); });之前,否则会被直接拦截返回404。
按照这个修改后,重启服务再访问http://localhost:4000/test应该就能正常返回"test"了。
内容的提问来源于stack exchange,提问作者mrks
相关产品推荐
相关产品推荐

