TypeError:路由器。use()要求中间件功能,但有一个对象

在使用 Node.js 和 Express 框架构建 Web 应用程序时,你可能会遇到 TypeError: Router.use() requires middleware function but got a Object 这个错误。

这个错误通常是因为在使用 app.use()router.use() 函数时传递了不正确的参数类型。这些函数期望接收一个中间件函数作为参数,但却接收到了一个对象。

什么是中间件?

在 Express 中,中间件(Middleware)是指处理 HTTP 请求和响应的一组函数。它们可以访问请求对象(request object)、响应对象(response object)和应用程序的下一个中间件函数。中间件函数可以执行各种任务,例如验证用户身份、处理表单数据、记录日志等。

Express 的中间件可以是一个函数或者一个函数数组,函数接收三个参数:请求对象、响应对象和下一个中间件函数的引用。如果中间件函数完成任务并要将控制权传递给下一个中间件函数,则需要调用 next() 函数。

下面是一个简单的 Express 中间件示例:

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

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

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

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

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

在这个示例中,我们定义了一个名为 logger 的中间件函数,并使用 app.use() 函数将其绑定到应用程序中。当客户端访问服务器时,logger 中间件会记录请求的方法和 URL,并将控制权传递给下一个中间件函数。

解决 TypeError 错误

回到 TypeError: Router.use() requires middleware function but got a Object 这个错误,它通常是由于将一个对象传递给 app.use()router.use() 函数而引起的。要解决这个错误,需要确保传递给这些函数的参数是一个函数或者函数数组。

下面是一个将对象传递给 app.use() 函数导致 TypeError 错误的示例:

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

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

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

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

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

在这个示例中,我们将一个对象 obj 传递给 app.use() 函数,这会导致 TypeError: Router.use() requires middleware function but got a Object 错误。

要解决这个问题,可以将对象包装成一个中间件函数,如下所示:

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

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

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

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

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

在这个示例中,我们将对象 obj 包装成一个中间件函数,并将其传递给 app.use() 函数。在中间件函数中,我们将对象存储在请求对象的属性上,以便后续的路由处理函数可以访问它。

当客户端访问服务器时,路由处理函数会通过请求对象的 obj 属性访问对象的

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/12563