【发布时间】:2020-10-26 05:30:39
【问题描述】:
TL;DR
表单提交带有“data/fileUpload”的 POST 请求。
服务器响应 200 并呈现新页面。太好了。
尝试再次在呈现的页面中上传新文件。
POST 请求现在是“data/fileUpload/fileUpload”。
服务器不知道该怎么做。坏蛋。
我不完全确定发生了什么,这就是为什么标题非常模糊的原因。我正在为 Node (Express) 应用程序实现一个简单的功能。 以下是此功能的作用:
- 用户上传文件。
- 用户提交文件以供审核。
- 用户收到回复。
问题
上传文件和返回结果功能运行顺畅。文件上传后服务器渲染一个新页面,浏览器仍然在“data/fileUpload”url。尝试上传第二个文件会将 POST 请求定向到服务器无法路由的以下 url “data/fileUpload/fileUpload”。
<!DOCTYPE html>
<!-- Boilerplate ... -->
<body
<div id="form">
<%= message %>
<% if(processed == "true"){ %>
<%= results %>
<% }; %>
<form method='post' action='data/fileUpload' enctype="multipart/form-data">
<input type='file' name='fileUploaded' id="browseButton" required>
<input type='submit' value="Upload" id="uploadButton">
</div>
<script>
var uploadField = document.getElementById("browseButton");
uploadField.onchange = function() {
if(this.files[0].size > 2097152){
alert("File is too big!");
this.value = "";
};
};
</script>
</body>
</html>
如您所见,表单操作是“data/fileUpload”。此发布请求由以下路由器和控制器处理。
// Defined in app.js
app.use('/data', dataRouter);
以下路由器位于 data.js 中。 processController 是从 processData.js 控制器导入的。
router.post('/fileUpload', [processController.fileUpload, processController.process]);
这是文件上传和处理的控制器。
exports.fileUpload = function(req, res,next) {
// Upload the file...
next(); // calls process function
};
// Process the data. Not implemented
exports.process = function(req, res) {
res.render('index', {processed:"true",
message: "hello", results:"result" });
});
};
以下是不完整的目录树。
├── app.js
├── 控制器
│ └── processController.js
├── package.json
├── 路线
│ ├── data.js
├── 上传
│ └── Uploaded.file
└── 浏览量
├── index.ejs
如何让服务器返回初始页面同时发送结果?
【问题讨论】:
标签: node.js express url post routes