Давайте сделаем этот шаг за шагом, вернувшись назад:
В этой строке:
app.use('/',chatcat.router);
Вы получите сообщение об ошибке, что chatcat.router
не определено, когда предполагается, что это функция.Переменная chatcat
происходит из этого:
const chatcat=require('./app');
Итак, в app / index.js у вас есть это:
const routes=require('./routes');
module.exports={
router: routes()
}
Итак, это означает, что вы вызываете функциючто require('./routes');
предполагается вернуть и положить его возвращаемое значение в экспорт.
Когда мы смотрим в app/routes/index.js
, мы видим, что вы экспортируете функцию, которая при вызове возвращает это:
return h.route12(routes);
Где h
происходит из этого:
const h=require('../helpers');
Когда мы смотрим в app/helpers/index.js
, мы видим, что он экспортирует функцию route12
:
let route12=routes=>{
console.log('calling registerroutes');
_registerRoutes(routes);
}
module.exports={
route12
}
И вы можете видеть, что route12()
при вызове невернуть что-нибудь.
Таким образом, вы получите undefined
.
Итак, быстрое и грязное исправление - заставить route12()
вернуть функцию, которая вам нужна, промежуточное ПОфункции, чтобы быть.
Но, честно говоря, этот код довольно грязный.Посмотрите, сколько было работы, чтобы узнать, что на самом деле должно быть chatcat.router
.Это не должно быть так сложно.Вы поместили целую кучу промежуточных файлов между импортом верхнего уровня и фактической реализацией, и все эти слои не добавляют никакой ценности.Все, что они делают, это неясные вещи.И, поскольку это функция промежуточного программного обеспечения, вы не будете использовать эту функцию промежуточного программного обеспечения во многих других местах.
Существует множество различных способов очистки, но я бы посоветовал поместить функцию промежуточного программного обеспечения в свой собственный модуль и require()
напрямую.Если для функции промежуточного программного обеспечения требуется доступ к другим функциям, то укажите require()
в том количестве, в котором она нуждается.Модульность должна быть как можно более мелкой.Вам не нужно прослеживать цепочку необходимых модулей, которые не добавляют никакого значения, чтобы добраться до фактической реализации.
Здесь также, похоже, существует концептуальная проблема.app.use()
следует использовать для установки промежуточного программного обеспечения (обработчики запросов, которые участвуют в обработке входящих запросов).Но ваш route12()
не только не возвращает ничего, что можно было бы использовать в качестве промежуточного программного обеспечения, даже если это не похоже на его цель в жизни.Когда мы смотрим на _registerRoutes()
, кажется, что вы пытаетесь переопределить функциональность, которую уже предлагает вам Express, но это выглядит как неправильная реализация, потому что вы предполагаете, что ему передается второй аргумент method
, который делает ваш собственный кодне передавайте его, а затем код внутри него пытается поместить вещи в router
, который никогда не подключается к вашему приложению.
В целом, существует, вероятно, значительно более простой способ сделать то, что вы сами »пытаюсь сделать.То, что именно вы пытаетесь выполнить, на самом деле не описано здесь, и реализация является достаточно неосновной, и я не могу точно сказать, что вы намеревались сделать, чтобы знать, как предложить упрощение.
В любом случае,Я объяснил вам, почему вы получили исходную ошибку.Надеюсь, вы можете взять его оттуда и исправить / упростить.