身体解析器实际上对快递做了什么?

时间:2018-03-28 23:42:11

标签: javascript node.js

好的,我正在浏览我在阅读一些教程时编写的旧节点代码。

我很难搞清楚Body Parser的确切功能。我也在使用ejs package

所以,我的基本直觉告诉我,身体解析器用于在节点和我的html模板之间传输数据,而ejs包用于将javascript嵌入到HTML模板中。

有人可以确认我是否正在朝着正确的方向思考?出于某种原因,他们的文档似乎太过于让我无法理解。 另外,如果有人还可以确认* *npm request **的功能是进行API调用吗?

2 个答案:

答案 0 :(得分:1)

让我们尽量保持最低技术性。

假设您正在向node-js服务器发送html表单数据,即您向服务器发出了请求。服务器文件将在请求对象下接收您的请求。现在通过逻辑,如果你控制台在服务器文件中记录这个请求对象,你应该看到你的表单数据在哪里,然后可以提取,但是谁!你实际上没有!

那么,我们的数据在哪里?如果它不仅出现在我的请求中,我们将如何提取它。

对此的简单解释是,http发送您的表单数据,这些数据旨在在到达目的地时进行汇编。那么你将如何提取你的数据。

这里描述了一种实际的方式:How bodyParser() works – Adam Zerner – Medium

但是,为什么每次都要手动解析数据块并组装它。使用一种叫做“身体解析器”的东西来为你做这件事。

body-parser会解析您的请求并将其转换为一种格式,您可以从中轻松提取您可能需要的相关信息。

例如,假设您的前端有一个注册表单。您正在填写它,并请求服务器在某处保存详细信息。

如果您使用正文解析器,请从您的请求中提取用户名和密码,如下所示。

............................................................。

var loginDetails = {

username : request.body.username,

password : request.body.password

};

............................................................。

所以基本上,body-parser解析了你的传入请求,组装了包含你的表单数据的块,然后为你创建了这个body对象并用你的表单数据填充它。

答案 1 :(得分:0)

除了iRohitBhatia's answer

如果您使用的是Express> = 4.16.0,则可以直接从Express使用主体解析器,因为主体解析器已通过以下方法重新添加: express.json()express.urlencoded()

Source

添加了express.json()和express.urlencoded()中间件,以提供现成的请求正文解析支持。这使用了下面的expressjs / body-parser模块模块,因此当前单独需要该模块的应用程序可以切换到内置解析器。