我一直在使用快速js搞乱一段时间了,我遇到了一种叫做身体解析器的东西。根据我的研究,body解析器允许我们通过HTTP请求发布POST内容。
我的问题是,使用express.js时是否绝对有必要使用body解析器?
如果没有必要,那么使用它有什么好处,如果没有使用正文解析器,那么需要做些什么来确保内容是POSTED?
提前谢谢。
答案 0 :(得分:0)
让我们尽量保持最低的技术水平。
假设您正在将HTML表单数据发送到node-js服务器,即您向服务器发出了请求。服务器文件将在请求对象下接收您的请求。现在按逻辑,如果您在服务器文件中控制台记录此请求对象,则应该在其中的某些位置看到表单数据,然后可以将其提取出来,但是哇!你实际上不!
那么,我们的数据在哪里?如果它不仅出现在我的请求中,我们将如何提取它。
对此的简单解释是http以分段形式发送表单数据,目的是在到达目的地时进行组装。那么您将如何提取数据。使用一种叫做“ body-parser”的东西可以为您做到这一点。
body-parser解析您的请求并将其转换为一种格式,您可以从中轻松提取您可能需要的相关信息。首先,在您的app.js文件中需要以下内容。
var bodyParser = require('body-parser')
并添加以下行使其生效
app.use(bodyParser.urlencoded({extended: true}));
答案 1 :(得分:0)
您可以利用事件on('data')
和on('end')
提取有效负载。无论何时发送POST请求,数据都会以比特流的形式到达。当流进入on('data')
事件时,将触发该流,您可以开始将流收集到缓冲区中。流结束(已接收到所有数据)后,将触发on('end')
事件,即可以开始使用刚刚收集的数据了。
Yopu需要包含stringDecoder(stringDecoder是节点内置的模块)
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;
});
如果您决定不使用任何外部库,这可能是最好的方法。