【问题标题】:How to use express-async-handler如何使用 express-async-handler
【发布时间】:2019-04-04 06:02:36
【问题描述】:

我正在浏览 github 上的一些代码:https://github.com/linnovate/mean/blob/master/server/routes/user.route.js

但是有一部分我不明白,那就是:

router.route('/')
    .post(asyncHandler(insert));

在 npm express-async-handler 被描述为:

用于处理异步快速路由中的异常并将它们传递给快速错误处理程序的简单中间件。

他们去举例说明如何使用该模块,但并没有解释太多。

所以我的问题是:

  1. 第12行的插入函数不带括号怎么调用?

  2. asyncHandler()的作用是什么,如果你决定不使用它,代码会是什么样子?

  3. 通常在使用 router.route('/').post 时,后面会有花括号。在这段代码中,我看不到任何内容。所以我的问题是: async function insertrouter.route('/').post 函数体的一部分吗?如果没有,那么为什么没有花括号?

  4. 在第 14 行 user.controller.js 究竟导出了什么(它是一个对象,还是一个变量...)?以这种方式导出它有什么好处?为什么不直接导出函数 insert()?

提前谢谢你。

【问题讨论】:

    标签: node.js model-view-controller controller routes async-await


    【解决方案1】:

    第12行的插入函数不带括号怎么调用?

    这里没有调用insert 函数。它作为函数引用传递给asyncHandler(),以便稍后调用。立即调用的是asyncHandler(),它返回一个新函数,该函数作为请求处理程序传递给.post()

    asyncHandler()的作用是什么,如果你决定不使用它,代码会是什么样子?

    这是一个围绕insert 的包装器,它查找从函数返回的被拒绝的promise,如果找到,则自动调用next(err)

    通常在使用 router.route('/').post 时,后面会有花括号。在这段代码中,我看不到任何内容。所以我的问题是:异步函数是否插入 router.route('/').post 的函数体的一部分?如果没有,那为什么没有花括号?

    我不确定你所说的花括号是什么意思。 .post() 期望将函数引用传递给它,当定义的路由与传入请求匹配时,将使用一组特定参数调用该函数引用。它可以用作以下任何一种:

    // externally defined request handler function
    router.route('/').post(someRequestHandlerFunc);
    
    // inline defined request handler function
    router.route('/').post(function(req, res, next) {
        // code here for the request handler
    });
    

    第 14 行的 user.controller.js 究竟导出了什么(它是一个对象,还是一个变量...)?以这种方式导出它有什么好处?为什么不直接导出函数 insert()?

    我假设第 14 行,你问的是here。这只是在此模块导出的insert 属性上导出insert 函数。导出函数时,不要使用insert()。这会立即调用该函数。您只需将函数的名称称为 insert 即可导出对以后可以调用的函数的引用。

    导出的原因是作为对象的属性而不是仅仅导出单个函数是为了使模块可扩展,以便它可以将其他东西导出为不同的命名属性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-16
      • 1970-01-01
      • 2021-05-28
      • 2023-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-14
      相关资源
      最近更新 更多