gpt4 book ai didi

node.js - Express.js 表单提交

转载 作者:搜寻专家 更新时间:2023-11-01 00:02:49 24 4
gpt4 key购买 nike

我正在使用 Express 为静态 HTML 文件 profile.html 提供服务器。在文件中,我有一个简单的表格。它曾经有一个文件上传,但为了简单起见,我把它缩减为只有一个文本输入。这是它的样子:

<form action="profile.html" method="post" id="foo" enctype="multipart/form-data">
<input type="text" name="foo" value="bar">
<input type="submit">
</form>

当我点击提交按钮时,Chrome 会显示提交表单的迹象,但它从未发生过。提交表单时,我的 profile.html 的 Node.js 代码从不运行。如果我查看 Chrome 开发人员工具的网络选项卡,它会显示请求仍处于待处理状态。这在使用 PHP 和 Apache 时完美运行,但在使用 Node.js 和 Express 时失败。

看了无数例子,感觉应该是配置问题,不是代码问题。什么会阻止表单提交到我的服务?

编辑:我的路线大致如下:

//modules, initialization, etc.
var app = express();

app.use(function(req, res, next) {
var data = "";
req.setEncoding("utf8");
req.on("data", function(chunk) {
data += chunk;
});
req.on("end", function() {
req.rawBody = data;
next();
});
});
app.use(express.bodyParser());

//Server up our templated static HTML
app.use("/search.html", search_html.handler);
app.use("/app.html", app_html.handler);
app.use("/login.html", login_html.handler);
app.use("/graph", graph_page.handler);
app.use("/dbrequest", dbrequest_page.handler);
app.use("/profile.html", profile_html.handler);

app.use("/", function(request, response) {
response.redirect("login.html");
});
app.listen(3000);

最佳答案

rawBody 中间件和 bodyParser 的组合不会起作用:您的中间件完全“耗尽”了 req 提供的流, bodyParser 会尝试做同样的事情。

但是由于流已经被读取并且它的 end 事件已经被触发,bodyParser 将无休止地等待 end 事件永远不会发生(这也解释了为什么请求会卡在待定状态)。

如果您的中间件不是绝对必要的,请将其排除在外。如果出于某种原因,您确实需要访问原始正文内容,我不确定是否可以在不重新实现 bodyParser 的情况下自己完成。

关于node.js - Express.js 表单提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15795371/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com