Я просматриваю код на github: https://github.com/linnovate/mean/blob/master/server/routes/user.route.js
Но есть часть этого, которую я не понимаю, а именно:
router.route('/')
.post(asyncHandler(insert));
В npm экспресс-асинхронный обработчик описывается как:
Simple middleware for handling exceptions inside of async express routes and passing them to your express error handlers.
Они приводят пример того, как использовать модуль, но это мало что объясняет.
Итак, мои вопросы:
Как вызывается функция вставки в строке 12 без скобок?
Какова функция asyncHandler (), как будет выглядеть код, если вы решите не использовать его?
Обычно при использовании router.route ('/'). сообщение следуют фигурные скобки. В этом коде я ничего не вижу. Итак, мой вопрос: является ли вставка асинхронной функции частью тела функции router.route ('/'). сообщение? а если нет, то почему нет фигурных скобок?
Что именно здесь экспортируется user.controller.js в строке 14 (это объект, переменная ...)? В чем преимущество такого экспорта? Почему бы просто не экспортировать функцию insert ()?
Заранее спасибо.





How is the insert function on line 12 called without parentheses?
Функция insert здесь не вызывается. Он передается в asyncHandler() как ссылка на функцию, чтобы его можно было вызвать позже. Это asyncHandler(), который вызывается немедленно и возвращает новую функцию, которая передается в .post() в качестве обработчика запроса.
What is the function of asyncHandler(), what would the code look like if you decide on not using it?
Это оболочка для insert, которая ищет отклоненное обещание, возвращаемое функцией, и, если обнаружено, автоматически вызывает next(err).
Normally when using router.route('/').post there are curly braceswhich follow. In this code I cant see any. So my question are: Is the async function insert part of the function body of router.route('/').post? and if not then why are there no curly braces?
Я не совсем понимаю, что вы подразумеваете под фигурными скобками. .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
});
What exactly is being exported here user.controller.js on line 14 (is it an object, a var...)? What is the advantage of exporting it this way? Why not just export the function insert()?
Я предполагаю, что строка 14, о которой вы спрашиваете, - это здесь. Это просто экспорт функции insert в свойстве insert экспорта этих модулей. Когда вы экспортируете функцию, вы не используете insert(). Это немедленно вызывает функцию. Вы просто ссылаетесь на имя функции как insert, чтобы экспортировать ссылку на функцию, которая может быть вызвана позже.
Причина экспорта заключается в том, чтобы экспортировать как свойство объекта, а не просто экспортировать отдельную функцию, чтобы сделать модуль расширяемым, чтобы он мог экспортировать другие вещи как свойства с разными именами.