正确的 POST 方式 JSON Formdata

Proper way of POSTing JSON Formdata

我想知道当服务器端期望 JSON 时提交表单的正确方式是什么。服务器在 node.js 中使用 express 框架实现。为了解析请求主体,使用了 bodyparser.json() 中间件。

目前我使用 JavaScript 拦截提交,然后创建一个表单数据对象,该对象又使用 ajax 编辑 POST。

我对这个实现的问题是 POST 的响应是用户应该被重定向到的整个页面。我想用响应的内容替换页面的 HTML 内容,但这对我来说似乎很脏,而且浏览器 URL 保持不变。

TL;DR:如何提交表单以便可以通过 req.body.myObj 在 express 中访问它并将浏览器重定向到响应?

谢谢你的想法。

不支持表单提交 JSON 格式请求的方式。 (对于不受支持的方式,请参阅 W3C HTML JSON form submission)。

唯一的方法是使用 Ajax。然后,您可以根据响应(正常 Ajax)修改 DOM 或通过设置 location 发出 GET 请求(并在会话中/通过 URL 传递数据/ etc(这是一个 hack))。

最好的方法通常是保留期望 JSON HTTP API 请求的端点,并在您想要处理常规表单时编写期望形式 url 编码或多部分数据的端点提交。

// Don't do this
app.use(bodyParser.json()); // for parsing application/json

// Do this most of the time
app.use(bodyParser.urlencoded({ extended: true })); // for parsing application/x-www-form-urlencoded

// Do this if you have file inputs
app.use(multer()); // for parsing multipart/form-data

代码来自 the express docs.