我正在通过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错误处理程序。
他们给出了如何使用该模块的示例,但并没有太多解释。
所以我的问题是:
第12行的插入函数如何不带括号地调用?
asyncHandler()的功能是什么,如果您决定不使用它,代码将是什么样?
通常在使用 router.route('/')。post 时会出现花括号。在此代码中,我看不到任何内容。所以我的问题是: 异步功能插入 是 router.route('/')。post 功能主体的一部分吗? ?如果不是,那为什么没有花括号呢?
在user.controller.js的第14行中到底输出了什么(它是一个对象,还是一个变量...)?以这种方式导出它的好处是什么?为什么不只导出函数insert()?
谢谢。
答案 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
即可导出对该函数的引用,以便以后调用。
导出的原因是作为对象的属性,而不仅仅是导出单个函数是为了使模块可扩展,以便它可以将其他内容导出为不同的命名属性。