我一直在使用 express js 有一段时间了,我遇到了一个叫做 body parser 的东西。根据我的研究,body 解析器允许我们从 HTTP 请求中发布内容。
我的问题是,在使用 express.js 时是否绝对有必要使用正文解析器?
如果没有必要,那么使用它有什么好处,如果不使用正文解析器,那么需要做些什么来确保内容已发布?
先感谢您。
我一直在使用 express js 有一段时间了,我遇到了一个叫做 body parser 的东西。根据我的研究,body 解析器允许我们从 HTTP 请求中发布内容。
我的问题是,在使用 express.js 时是否绝对有必要使用正文解析器?
如果没有必要,那么使用它有什么好处,如果不使用正文解析器,那么需要做些什么来确保内容已发布?
先感谢您。
让我们尽量保持技术含量最低。
假设您正在向 node-js 服务器发送一个 html 表单数据,即您向服务器发出请求。服务器文件将在请求对象下接收您的请求。现在按逻辑,如果您在服务器文件中控制台记录此请求对象,您应该会在其中的某个位置看到您的表单数据,然后可以提取这些数据,但是哇!你实际上没有!
那么,我们的数据在哪里?如果它不仅出现在我的请求中,我们将如何提取它。
对此的简单解释是 http 以零碎的形式发送您的表单数据,这些数据旨在在到达目的地时进行组装。那么你将如何提取数据。使用一种叫做“body-parser”的东西可以为你做这件事。
body-parser 解析您的请求并将其转换为一种格式,您可以从中轻松提取您可能需要的相关信息。首先在您的 app.js 文件中需要以下内容。
var bodyParser = require('body-parser')
并添加以下行以使其工作
app.use(bodyParser.urlencoded({extended: true}));
您可以利用事件on('data')
并on('end')
提取有效负载。每当发送 POST 请求时,数据都会以比特流的形式到达。当流进入时,on('data')
事件被触发,您可以开始将流收集到缓冲区中。当流结束(已收到所有数据)on('end')
时,触发事件,即您可以开始使用刚刚收集的数据。
Yopu 需要包含 stringDecoder(stringDecoder 是一个内置在 node 中的模块)
const string_decoder= require('string_decoder').StringDecoder;
您需要让这段代码作为中间件运行。
var buffer= "";
request.on('data', function(data_stream)
{
//start collecting the data stream into a buffer
buffer= buffer + utf8_decoder.write(data_stream);
});
request.on('end', function()
{
buffer= buffer + utf8_decoder.end();
//add the buffer to the request object so it can be accessed elsewhere
request.payload= buffer;
});
如果您决定不使用任何外部库,这可能是最好的方法。