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

配置Express auth路由后,访问/api/v1/auth路径提示路由不存在?

问题原因与解决办法

问题出在中间件和路由的挂载顺序上:你在app.js里先注册了notFoundMiddleware(404处理中间件),之后才挂载auth和jobs路由。而Express的中间件是按代码顺序依次执行的,所有请求会先经过notFoundMiddleware,直接返回"Route doesn't exist",根本轮不到后面的路由匹配。

修改方案

把路由挂载代码移到404中间件之前,调整后的关键代码如下:

// 先挂载业务路由
app.use('/api/v1/auth', authRouter);
app.use('/api/v1/jobs', jobsRouter)

// 再注册错误处理中间件
app.use(notFoundMiddleware);
app.use(errorHandlerMiddleware);

完整修改后的app.js代码

require('dotenv').config();
require('express-async-errors');
const express = require('express');

const app = express();

//connect to the db
// const connectDB = require('./db/connect');

//routers
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());
// extra packages

// routes
app.get('/', (req, res) => {
  res.send('jobs api');
});

app.get('/auth/register', (req,res)=>{
  res.send('This is the bullshit')
});

// 路由挂载移到错误中间件之前
app.use('/api/v1/auth', authRouter);
app.use('/api/v1/jobs', jobsRouter)

// 错误处理中间件放在最后
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();

调整后重启服务器,再用POST请求访问localhost:3000/api/v1/auth/register或localhost:3000/api/v1/auth/login就能正常触发控制器里的响应了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 10:17:24