解决 Express.js 中 POST 请求传递数组参数的问题

阅读时长 6 分钟读完

在 Express.js 中,我们经常会使用 POST 请求来传递参数。但是,当我们需要传递数组类型的参数时,却会遇到一些问题。本文将介绍如何解决这个问题,并给出示例代码。

问题描述

假设我们有一个表单,其中有一个输入框可以输入多个值,我们想要将这些值以数组的形式传递给后端。我们可以通过以下代码来实现:

在后端,我们可以通过以下代码来获取这些值:

但是,这样获取到的 values 为 undefined,而不是我们期望的数组。

解决方法

为了解决这个问题,我们需要在前端和后端分别进行处理。

前端处理

在前端,我们可以将多个输入框的值合并成一个数组,然后将这个数组作为参数传递给后端。修改代码如下:

-- -------------------- ---- -------
----- ---- - -------------------------------
------------------------------- ------- -- -
  -----------------------
  ----- ------ - ----------------------------------------------
  ----- ------ - ---------------------------- -- -------------
  ---------------- -
    ------- -------
    -------- -
      --------------- ------------------
    --
    ----- ---------------- ------ --
  ---
---

在前端,我们将多个输入框的值合并成一个数组,并使用 fetch API 发送 POST 请求。注意,我们需要设置请求头的 Content-Type 为 application/json,这样后端才能正确地解析我们发送的数据。

后端处理

在后端,我们需要对传递过来的参数进行特殊处理,才能正确地获取到数组类型的参数。修改代码如下:

在后端,我们使用了 bodyParser 中间件来解析请求体。注意,我们需要同时使用 bodyParser.json() 和 bodyParser.urlencoded(),并将 extended 参数设置为 true,这样才能正确地解析发送过来的 JSON 数据。

在获取参数时,我们需要将 req.body.values 转换成数组,如果没有传递该参数,则默认为一个空数组。

示例代码

完整的示例代码如下:

-- -------------------- ---- -------
--------- -----
------
------
  ----- ----------------
  ----------------- ---- -------------------
-------
------
  ----- ---------------- --------------
    ------ ----------- ------------- --
    ------ ----------- ------------- --
    ------ ----------- ------------- --
    ------- -------------------------
  -------
  --------
    ----- ---- - -------------------------------
    ------------------------------- ------- -- -
      -----------------------
      ----- ------ - ----------------------------------------------
      ----- ------ - ---------------------------- -- -------------
      ---------------- -
        ------- -------
        -------- -
          --------------- ------------------
        --
        ----- ---------------- ------ --
      ---
    ---
  ---------
-------
-------
-- -------------------- ---- -------
----- ------- - -------------------
----- ---------- - -----------------------

----- --- - ----------
---------------------------
------------------------------- --------- ---- ----

------------------- ----- ---- -- -
  ----- ------ - --------------- -- ---
  -------------------- -- ---------- --------- ---------
---

---------------- -- -- -
  ------------------- -- ------- -- ------------------------
---

总结

在 Express.js 中,我们可以通过前端和后端的特殊处理来解决 POST 请求传递数组参数的问题。前端需要将多个输入框的值合并成一个数组,并使用 fetch API 发送 POST 请求;后端需要使用 bodyParser 中间件来解析请求体,并将 req.body.values 转换成数组。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/650d06c595b1f8cacd6c742c

纠错
反馈