如何使用快递异步处理程序

时间:2018-10-31 05:55:40

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

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

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

column1   column2   column3
   1        8          1
   2        9          2
   20       1 
   4        2
   56
   6
   2

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

  

简单的中间件,用于处理异步Express路由内的异常并将其传递给您的Express错误处理程序。

他们给出了如何使用该模块的示例,但并没有太多解释。

所以我的问题是:

  1. 第12行的插入函数如何不带括号地调用?

  2. asyncHandler()的功能是什么,如果您决定不使用它,代码将是什么样?

  3. 通常在使用 router.route('/')。post 时会出现花括号。在此代码中,我看不到任何内容。所以我的问题是: 异步功能插入 router.route('/')。post 功能主体的一部分吗? ?如果不是,那为什么没有花括号呢?

  4. user.controller.js的第14行中到底输出了什么(它是一个对象,还是一个变量...)?以这种方式导出它的好处是什么?为什么不只导出函数insert()?

谢谢。

1 个答案:

答案 0 :(得分:2)

  

第12行的插入函数如何不带括号地调用?

此处未调用insert函数。它作为函数引用传递到asyncHandler(),以便稍后调用。 asyncHandler()被立即调用,并返回一个新函数,该函数作为请求处理程序传递给.post()

  

asyncHandler()的功能是什么,如果您决定不使用它,代码将是什么样?

这是insert的包装,用于查找从函数返回的被拒绝的诺言,如果找到,则自动调用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即可导出对该函数的引用,以便以后调用。

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