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

ExpressJS路由路径存在但POST请求返回404错误求助

问题描述

我遇到了一个基础路由错误,具体情况如下:

项目结构

- controllers
   authentication.js
- routes
   auth.js
   pages.js
- views
   register.html
- server.js

相关代码片段

controllers/authentication.js

//...
exports.register = upload.none(), function (req, res) {
  // 业务逻辑
}
//...

routes/auth.js

const express = require('express');
const authController = require("../controllers/authentication");
const router = express.Router();
router.post('/register', authController.register);
module.exports = router;

views/register.html

//...
<form action="/auth/register" method="POST" enctype="multipart/form-data" id="myForm">
/...

server.js

const express = require('express');
const path = require('path');
const app = express();
const publicDirectory = path.join(__dirname, './public');
app.use(express.static(publicDirectory));
app.set('view engine', 'html');
app.use('/', require('./routes/pages'));
app.use('/auth', require('./routes/auth'));
app.listen(8080, () => {
    console.log('Server listening on port http://localhost:8080');
});

提交表单时控制台报错:POST http://localhost:8080/auth/register 404 (Not Found)。但如果跳过controller,直接在routes/auth.js的router.post('/register', ...)里写业务逻辑就能正常运行,请问问题出在哪?

解决办法

问题核心是controllers/authentication.js里的导出写法错误:你用了逗号运算符,这会导致exports.register实际只赋值了后面的匿名函数,而upload.none()这个中间件根本没被加入到路由的处理链条里,甚至可能因为语法问题让整个路由处理逻辑失效,最终触发404。

修正方法很简单,把中间件和处理函数放进一个数组里,Express支持接收中间件数组作为路由处理函数:

修正后的controllers/authentication.js

//...
exports.register = [upload.none(), function (req, res) {
  // 你的业务逻辑代码
}];
//...

或者你也可以用嵌套调用的方式(不过数组写法更清晰):

//...
exports.register = function(req, res, next) {
  upload.none()(req, res, function(err) {
    if (err) return next(err);
    // 写你的业务逻辑
  });
};
//...

另外确认下upload实例在authentication.js里是否正确引入并初始化(比如用multer创建),不过根据你直接写路由能运行的情况,这部分应该没问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 16:01:08