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

Node.js REST API(Express+MongoDB)路由访问报错求助

解决Express中"Cannot GET /new/test"路由错误的方案

我正在用Express Web服务器和MongoDB数据库开发Node.js REST API,项目是标准的Express结构(包含controllers、routes等目录)。当尝试访问/new/test路由时,遇到了Cannot GET /new/test错误,这个路由的预期功能是根据URL参数firstname在数据库中创建新条目。我的Routes.js代码片段如下:

'use strict';
module.exports = function(app) {
var americaine = require('../controllers/americaineController');
// Firstname Routes
app.ro...

结合你的场景,咱们从几个最可能的原因入手排查:

1. HTTP请求方法不匹配(最常见!)

创建数据库新条目属于写入操作,按照REST规范应该用POST请求,但浏览器直接输入URL默认发送的是GET请求。如果你的路由定义的是app.post('/new/test', ...),那用GET访问肯定会提示找不到路由。

  • 解决办法:
    • 先检查你的路由代码,确认是用app.post还是app.get。如果是创建资源,优先用POST。
    • 改用Postman、curl这类工具发送POST请求到/new/test,把firstname参数放在请求体或者URL查询参数里(具体看你控制器的逻辑)。

2. 路由定义不完整

从你给出的代码片段看,app.ro...明显是截断了,大概率路由没写完。正确的路由注册应该类似这样:

// 假设你的控制器里有处理创建逻辑的方法叫createNewEntry
app.post('/new/test', americaine.createNewEntry);

要确保路由完整挂载到Express的app实例上,并且和控制器的处理函数正确关联。

3. 路由文件没被主入口正确引入

检查你的项目主入口文件(比如app.js或者server.js),有没有正确引入routes文件并传递app实例:

var routes = require('./routes/Routes');
routes(app); // 必须调用路由模块导出的函数,把app传进去才会注册路由

要是这一步漏了,你的路由根本不会被Express识别到。

4. URL路径的拼写/大小写问题

Express的路由是区分大小写的,比如/New/Test和/new/test是完全不同的路径。确认你请求的URL和路由定义的路径完全一致,没有拼写错误。

5. 中间件和路由的顺序问题

如果你的主入口文件里,404处理中间件(比如app.use((req, res) => res.status(404).send('Not Found')))放在了路由注册的前面,那请求会先被404中间件拦截,根本到不了你的路由。要保证路由注册在所有全局中间件之后,404中间件之前。

如果排查完这些还没解决,建议补充完整的路由代码和控制器里的处理函数代码,这样能更精准定位问题~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:32:48