先给你一些背景知识,然后我会进行具体的回答。
您正在使用 Express 来解析请求正文,您将使用正文解析器。见:
也许最好看一些示例,您可以通过使用 JSON 和来自 HTML 表单格式的数据发送请求来测试这些示例。
使用表单编码的示例请求:
curl -X POST localhost:4443 \
-H 'Content-Type: application/x-www-form-urlencoded' \
-d 'a=X&b=Y'
(这是一个可以放在一行中的单个命令,无需反斜杠)
使用 JSON 编码的示例请求:
curl -X POST localhost:4443 \
-H 'Content-type: application/json' \
-d '{"a":"X","b":"Y"}'
(这也是一个单一的命令——为了便于阅读,放在多行上)
现在,可以响应这些请求的服务器代码:
这是一个接受 JSON 的服务器:
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
app.use(bodyParser.json());
app.post('/', (req, res) => {
console.log(req.body);
res.json({ ok: true });
});
app.listen(4443, () => console.log('Listening on http://localhost:4443/'));
这是一个接受表单数据的服务器:
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
app.use(bodyParser.urlencoded({ extended: true }));
app.post('/', (req, res) => {
console.log(req.body);
res.json({ ok: true });
});
app.listen(4443, () => console.log('Listening on http://localhost:4443/'));
这是一个接受两者的服务器:
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.post('/', (req, res) => {
console.log(req.body);
res.json({ ok: true });
});
app.listen(4443, () => console.log('Listening on http://localhost:4443/'));
如您所见,支持这两种样式很简单,您不必只选择其中一种。
现在,针对您的具体问题:
所以我的问题是在构建 API 时哪种方法更好,是接受 JSON 请求还是接受普通请求,如果我的 API 是为其他开发人员制作的,哪种方法更好?
作为一名开发人员,我个人更喜欢使用 JSON,但如果需要,我可以理解使用表单编码的必要性。使用 Express 可以很容易地同时支持两者,因此您不必只选择一个。
但是,如果您出于某种原因只想选择一个,请与您的开发人员交谈。这些是您的 API 的消费者,因此他们是唯一可以告诉您什么是“更好”的人。