📅  最后修改于: 2023-12-03 14:57:02.863000             🧑  作者: Mango
本测验将涉及 Node.js 方面的问题,主要考察程序员对于网络技术的了解。
在 Node.js 中,我们使用 http
模块进行 HTTP 通信。对于 POST 请求一般有两种方式来传递参数,一种是 urlencoded,一种是 JSON 具体的方式如下:
const http = require('http');
const querystring = require('querystring');
const postData = querystring.stringify({
'msg': 'Hello World!'
});
const options = {
hostname: 'www.baidu.com',
port: 80,
path: '/',
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'Content-Length': Buffer.byteLength(postData)
}
};
const req = http.request(options, (res) => {
console.log(`statusCode: ${res.statusCode}`);
res.on('data', (d) => {
process.stdout.write(d);
});
});
req.on('error', (error) => {
console.error(error);
});
req.write(postData);
req.end();
const http = require('http');
const data = JSON.stringify({
name: 'John Doe',
age: 25
});
const options = {
hostname: 'localhost',
port: 5000,
path: '/user',
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Content-Length': Buffer.byteLength(data)
}
};
const req = http.request(options, (res) => {
console.log(`statusCode: ${res.statusCode}`);
res.on('data', (d) => {
process.stdout.write(d);
});
});
req.on('error', (error) => {
console.error(error);
});
req.write(data);
req.end();
那么问题来了:对于 application/x-www-form-urlencoded
和 application/json
两种传参方式,它们的区别是什么呢?我们该如何选择?
application/x-www-form-urlencoded
是指在发送 HTTP POST 请求时,在请求头中使用 application/x-www-form-urlencoded
作为 Content-Type,请求体中是按照 key1=value1&key2=value2 的形式传递参数的。例如:
Content-Type: application/x-www-form-urlencoded
foo=bar&hello=world&key=value
而 application/json
是指在发送 HTTP POST 请求时,在请求头中使用 application/json
作为 Content-Type,请求体中是直接以 JSON 格式传递参数的。例如:
Content-Type: application/json
{
"foo": "bar",
"hello": "world",
"key": "value"
}
一般来说,如果要传递的参数数量较少,可以选用 application/x-www-form-urlencoded
,如果参数较多或者参数的层次结构比较复杂,可以选用 application/json
。
此外,application/json
可以兼容更多类型的数据,而 application/x-www-form-urlencoded
只适用于表单数据,因此在传递一些复杂的数据结构而言,application/json
更具优势。
需要注意的是,使用 application/json
时,需要将参数转成 JSON 格式,而使用 application/x-www-form-urlencoded
时,则需要先将参数转成 Key-Value 形式,再使用 querystring.stringify() 方法将其转成字符串。