Javascript 什么是express.json()和express.urlencoded()?

Javascript 什么是express.json()和express.urlencoded()?,javascript,node.js,express,Javascript,Node.js,Express,我找不到关于express.json()和express.urlencoded()的任何文档。他们每个人具体做什么 json和urlencoded中间件都是。自述文件是这样说的: bodyParser([选项]) 返回同时解析json和urlencoded的中间件。选项被传递给两个中间件 json([选项]) 返回仅解析json的中间件。这些选择包括: strict-仅解析对象和数组 限制-最大请求正文大小 reviver-传递到JSON.parse() bodyParser.urlenco

我找不到关于express.json()和express.urlencoded()的任何文档。他们每个人具体做什么

json和
urlencoded
中间件都是。自述文件是这样说的:

bodyParser([选项]) 返回同时解析
json
urlencoded
的中间件。
选项
被传递给两个中间件

json([选项]) 返回仅解析
json
的中间件。这些选择包括:

  • strict
    -仅解析对象和数组
  • 限制
    -最大请求正文大小
  • reviver
    -传递到
    JSON.parse()
bodyParser.urlencoded([选项]) 返回仅对模块解析
urlencoded
的中间件。这些选择包括:

  • 限制
    -最大请求正文大小

下面的解释应该可以消除对
express.json()
express.urlencoded()
以及主体解析器使用的疑问。我花了一些时间才弄明白

  • 什么是中间件?在应用程序方法中处理请求和发送响应之间调用的是那些方法/函数/操作

  • 在谈论
    express.json()
    express.urlencoded()
    时,请特别考虑POST请求(即.POST请求对象)和PUT请求(即.PUT请求对象)

  • 获取请求或删除请求不需要
    express.json()
    express.urlencoded()

  • 对于POST和PUT请求,您需要
    express.json()
    express.urlencoded()
    ,因为在这两个请求中,您都是向服务器发送数据(以某些数据对象的形式),并要求服务器接受或存储包含在正文中的数据(对象)(即,
    Request.body
    )该(POST或PUT)请求的

  • Express为您提供了中间件来处理请求体中的(传入)数据(对象)

    a、
    express.json()
    是一种内置于express中的方法,用于将传入的请求对象识别为json对象。此方法在应用程序中使用以下代码作为中间件调用:
    app.use(express.json());

    b、
    express.urlencoded()
    是一种内置于express中的方法,用于将传入的请求对象识别为字符串或数组。此方法在应用程序中被称为中间件,使用以下代码:
    app.use(express.urlencoded());

  • 或者,我建议使用主体解析器(它是一个NPM包)来做同样的事情。它是由构建express的同一个PEEP开发的,设计用于与express一起使用。主体解析器过去是express的一部分。想想专门用于POST请求的主体解析器(即.POST请求对象)和/或PUT请求(即.PUT请求对象)

  • 在主体解析器中,您可以执行以下操作

    // calling body-parser to handle the Request Object from POST requests
    var bodyParser = require('body-parser');
    // parse application/json, basically parse incoming Request Object as a JSON Object 
    app.use(bodyParser.json());
    // parse application/x-www-form-urlencoded, basically can only parse incoming Request Object if strings or arrays
    app.use(bodyParser.urlencoded({ extended: false }));
    // combines the 2 above, then you can parse incoming Request Object if object, with nested objects, or generally any type.
    app.use(bodyParser.urlencoded({ extended: true }));
    

  • 什么是中间件

    要了解express.json和express.urlencoded的功能,您必须了解什么是中间件

    中间件是expressJS中的函数或方法,用于对向服务器发出的请求执行各种操作

    现在,您应该知道如何使用express获取路由请求

    app.get("/api/houses", (req, res) => {
         console.log("Received request");
         res.send("houses")
       })
    
    中间件的重要性

    上面的代码是express如何处理get请求的典型示例。但是在您希望对服务器的每个请求都执行操作的情况下,您不希望在每个路由中重复代码

    在这一阶段,中间件起到了解救的作用。对于每个请求,中间件就像一个通用的接收器

    app.use((req, res, next) => {
          console.log("Verifing request"); 
          next();
         })
    
    上面是一个自定义中间件,它验证向我的服务器发出的每个请求,并发送ad,根据请求的类型将请求发送到下一个适当的路由中间件。(GET、POST、PUT等)

    内置中间件

    现在expressJS已经有了一些中间件,可以帮助开发人员完成一些繁琐的任务,比如将请求体转换为JSON等等

    这些内置ExpressJS中间件的示例如下

    • express.json()
    • express.urlencoded()
    express.json()是一个内置的express中间件,用于将请求体转换为json

    express.urlencoded()就像express.json()将请求体转换为json一样,它还执行一些其他功能,如:将表单数据转换为json等。

    如果您问我“express.urlencoded({extended:false})和express.json()之间的区别是什么?”

    嗯,区别在于

    如果使用express.json()它将从post/fetch请求中解析正文,但从html post表单中解析除外

    它不会解析htmlpost表单中的信息

    <form action="/" method="POST">
        <input type="text" name="username">
        <button>Submit</button>
    </form>
    
    单击“提交”后,它将发送
    {}

    但是如果您取消了app.use(express.urlencoded({extended:false}))的注释
    ,
    然后您将获得{“用户名”:“dean_ilham”}


    因此区别在于express.json()是一个post请求的主体解析器,除了html post表单和express.urlencoded({extended:false})是一个html post表单的主体解析器如果您使用的是express>=4.16.0,主体解析器已经在
    express.json()方法下重新添加
    express.urlencoded()
    app.use(bodyParser.urlencoded({extended:true}));
    不组合
    app.use(bodyParser.json());
    app.use(bodyParser.urlencoded({extended:false})
    
    const express = require('express')
    const app = express()
    
    app.use(express.json())
    // app.use(express.urlencoded({ extended: false }))
    app.use(express.static("public"))
    
    
    app.get("/", (req, res) => {
        res.sendFile("index.html")
    })
    
    app.post("/", (req, res) => {
        res.send(req.body)
    })
    
    
    const port = process.env.PORT || 3001
    app.listen(port, () => {
        console.log(`Server Up in Port ${port}`);
    })