简介
fooll-beforeaction 是一个基于 Express 的中间件,它可以让你在执行路由操作之前进行某些操作。这些操作包括验证用户登录状态,处理请求参数等。
安装
使用 npm 安装:
npm install fooll-beforeaction
使用指南
引入
首先,你需要将 fooll-beforeaction 引入你的项目中:
const beforeAction = require('fooll-beforeaction');
配置
然后,你需要配置 beforeAction。下面是一个例子:
-- -------------------- ---- ------- ----- ------------------ - - --------- - - -------- ----- ---- ----- -- - -- -------- -- ---------------- -- --------------------- - ----------------------- - ---- - ------- - -- ------ ------------ ------------- -- - -------- ----- ---- ----- -- - -- ------ ---------- - - ---- ------ -- ------- -- ------ ----------- -- -- --
这个例子定义了两个 handler。第一个 handler 用于验证用户是否登录,它只在 /account 和 /settings 路径下执行。第二个 handler 用于设置请求参数,它只在 /api/* 路径下执行。在这个例子中,我们使用了一个名为 req.custom 的对象来存储请求参数。
下面是一个更复杂的例子:
-- -------------------- ---- ------- ----- ------------------ - - --------- - - -------- ----- ---- ----- -- - -- -------- -- ---------------- -- --------------------- - ----------------------- - ---- - ------- - -- ------ -------------- --------------- -- - -------- ----- ----- ---- ----- -- - -- ------ ----- ---- - ----- ---------------------------------- -- -------------- -- ------------------------------------- - ----- ----- - --- ------------- --------- ------------ - ---- ------------ - ---- - ------- - -- ------ ------------- -- - -------- ----- ---- ----- -- - -- ---------- ----- ----- - - ---- -------------- -- ----------------- ----- ----- -- - -- ----- - ---------- - ---- - ---------- - - ----- -- ------- - --- -- -------- -------- ------ ----------- -- -- -------- ----- ---- ---- ----- -- - -- ---- --------------------- -- ----------- ------ ------------ --- -- --
在这个例子中,我们定义了三个 handler。第一个 handler 验证用户是否登录,并且在 /account/* 和 /settings/* 路径下执行。第二个 handler 验证用户是否具有管理员权限,并且在 /admin/* 路径下执行。第三个 handler 根据请求参数查询数据,并且只在 GET 请求和 /api/* 路径下执行。
另外,我们还定义了一个 onError 函数,用于处理错误。如果前一个 handler 抛出了错误,那么 onError 函数就会被调用。在这个例子中,我们简单地返回一个 JSON 对象,其中包含错误信息。
应用
最后,将 beforeAction 中间件应用到 Express 应用程序中:
-- -------------------- ---- ------- ----- ------- - ------------------- ----- ------- - --------------------------- ----- ------------ - ------------------------------ ----- --- - ---------- ----------------- ------- --- -------- ------- ------ ------------------ ----- ---- ------------------------------------------ -- --------- -----------------
示例代码
为了更好地理解 beforeAction,下面是一个实际的例子。
1. 获取用户信息
在这个例子中,我们要定义一个路由,用于获取当前用户的信息。用户必须已登录,并且具有 admin 权限。
-- -------------------- ---- ------- ---------------------- ----- ---- ----- -- - ----- ---- - - --- ------------------- ----- ----- ----- ------ ------------------- ------------ --------- ---------- -- --------------- ---
为了符合我们的需求,我们可以使用 beforeAction 进行验证。
-- -------------------- ---- ------- ----- ------------------ - - --------- - - -------- ----- ---- ----- -- - -- --------------------- - ----------------------- - ---- - ------- - -- ------ ------------- -- - -------- ----- ----- ---- ----- -- - ----- ---- - ----- ---------------------------------- -- ------------------------------------- - ----- ----- - --- ------------- --------- ------------ - ---- ------------ - ---- - ------- - -- ------ ------------- -- -- -------- ----- ---- ---- ----- -- - --------------------- -- ----------- ------ ------------ --- -- -- ---------------------- ----- ---- ----- -- - ----- ---- - - --- ------------------- ----- ----- ----- ------ ------------------- ------------ --------- ---------- -- --------------- --- ------------------------------------------
在这个例子中,我们定义了两个 handler,分别用于验证用户登录状态和管理员权限。如果验证失败,则会抛出一个包含错误信息的 Error 对象,beforeAction 会自动调用 onError 函数。否则,路由会正常进行,输出当前用户的信息。
2. 处理请求参数
在这个例子中,我们要定义一个路由,用于查询数据。请求参数为:
- foo: 查询关键字
- limit: 最大返回数量,默认为 10
-- -------------------- ---- ------- -------------------- ----- ---- ----- -- - ----- ----- - - ---- -------------- -- ----- ----- - ------------------------- --- -- --- ----------------------------------------- ----- -- - -- ----- - ---------- - ---- - --------------- - --- ---
在这个例子中,我们可以使用 beforeAction 验证请求参数,并将查询结果存储在 req.custom 中。
-- -------------------- ---- ------- ----- ------------------ - - --------- - - -------- ----- ---- ----- -- - ----- ----- - ------------------------- --- -- --- ---------- - - ------ -- ------- -- -------- -------- ------ ----------- -- -- -------- ----- ---- ---- ----- -- - --------------------- -- ----------- ------ ------------ --- -- -- -------------------- ----- ---- ----- -- - ----- ----- - - ---- -------------- -- ----- ----- - ----------------- ----------------------------------------- ----- -- - -- ----- - ---------- - ---- - --------------- - --- --- ------------------------------------------
在这个例子中,我们定义了一个 handler,用于设置请求参数。如果请求中没有 limit 参数,则默认为 10。我们通过 req.custom.limit 将 limit 存储在 req.custom 中,方便后续使用。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60056cb981e8991b448e6262