Express项目模块导入正常,浏览器访问接口提示Router不存在
问题解决:浏览器访问出现“Router does not exist”错误
问题描述
已完成所有模块的导入导出操作,但通过浏览器地址栏访问注册对应地址时,页面提示“Router does not exist”。
相关代码片段
controller/auth.js
const register = async (req, res) => { res.send('Register User'); }; const login = async (req, res) => { res.send('Login User'); }; module.exports = { register, login };
routes/auth.js
const express = require('express'); const router = express.Router(); const { register, login } = require('../controllers/auth'); router.post('/register', register); router.post('/login', login); module.exports = router;
app.js
require('dotenv').config(); require('express-async-errors'); const express = require('express'); const app = express(); const connectDB = require('./db/connect'); //route const authRouter = require('./routes/auth'); const jobsRouter = require('./routes/jobs'); // error handler const notFoundMiddleware = require('./middleware/not-found'); const errorHandlerMiddleware = require('./middleware/error-handler'); app.use(express.json()); app.use('/api/v1/auth', authRouter); app.use('/api/v1/jobs', jobsRouter); // extra packages app.use(notFoundMiddleware); app.use(errorHandlerMiddleware); const port = process.env.PORT || 3000; const start = async () => { try { await connectDB(process.env.MONGO_URI); app.listen(port, () => console.log(`Server is listening on port ${port}...`) ); } catch (error) { console.log(error); } }; start();
问题原因
浏览器地址栏发起的是GET请求,但你的路由中/register和/login仅配置了POST方法,服务器找不到对应GET请求的路由规则,因此触发notFoundMiddleware,返回“Router does not exist”。
解决办法
根据需求选择以下方案之一:
方案1:添加GET请求支持
如果需要通过浏览器直接访问(比如测试),给路由新增GET方法的匹配规则:
// routes/auth.js router.post('/register', register); router.get('/register', register); // 新增GET方法路由 router.post('/login', login); router.get('/login', login); // 可选,为登录接口添加GET支持
方案2:用POST请求工具测试
注册、登录这类操作本就应该使用POST请求,推荐用Postman、curl或浏览器开发者工具发送请求:
- curl命令测试示例:
curl -X POST http://localhost:3000/api/v1/auth/register
- 浏览器控制台用fetch测试示例:
fetch('http://localhost:3000/api/v1/auth/register', { method: 'POST' }) .then(res => res.text()) .then(data => console.log(data));
方案3:优化404错误提示(可选)
修改notFoundMiddleware,让错误提示更精准,方便排查问题:
// middleware/not-found.js const notFound = (req, res) => { res.status(404).send(`Route ${req.method} ${req.path} does not exist`); }; module.exports = notFound;
内容的提问来源于stack exchange,提问作者Ehsan Ellahi
相关产品推荐
相关产品推荐

