我知道body-parser
及其作用。我很想知道使用express
时请求中的数据在哪里。在body-parser
解析输入之前存在哪种格式。
// parse urlencoded types to JSON
app.use(bodyParser.urlencoded({
extended: true
}));
// parse various different custom JSON types as JSON
app.use(bodyParser.json({ type: 'application/*+json' }));
// parse some custom thing into a Buffer
app.use(bodyParser.raw({ type: 'application/vnd.custom-type' }));
// parse an HTML body into a string
app.use(bodyParser.text({ type: 'text/html' }));
如果没有使用这些数据,那么数据会在哪里?它将以哪种格式提供?
这在Node documentation中已经完全涵盖了。
传递给处理程序的请求对象实现ReadableStream接口。就像任何其他流一样,可以在其他地方收听或传输此流。我们可以通过收听流的“数据”和“结束”事件来直接从流中获取数据。
Express实际上是对Node.js HTTP服务器功能的扩展,包括扩展本机Request和Response对象。因此,您可以像native request object as well一样对待Express请求
对特定路径发出POST请求(带有可选的查询参数)。请求的主体是POST数据的放置位置。默认情况下,Express会读取请求的标头,但不会读取请求的正文。读取和解析该请求主体是身体解析器中间件的工作,以便您可以轻松获取其数据。
如果没有使用这些数据,那么数据会在哪里?它将以哪种格式提供?
因此,如果您没有安装body-parser
中间件或者没有与数据格式匹配的中间件版本,那么正文仍将在传入请求流中,等待读取。请求的req
参数是可读流。数据将等待在该流中读取。
格式将是请求中的内容类型标头所说的格式。对于经典的表单帖子,它通常是application/x-www-form-urlencoded
,但它可以设置为其他类型,如application/json
。请求者决定要设置的内容类型,然后他们必须根据该标准对正文中的数据进行编码。
对于文件上传等内容,可以使用其他内容类型,例如multipart/form-data
。