У вас есть циклический цикл зависимостей, и вместо создания бесконечного цикла подсистема require()
обнаруживает это и не может загрузить ваш модуль.
В app.js
загружается index.js
. В index.js
вы загружаете app.js
. Круговая петля зависимостей.
Существует два отдельных метода, которые можно использовать для решения вашей конкретной проблемы. Похоже, вы используете некоторые из техник, а некоторые - другой, и это создает вашу проблему.
Классический способ определения новых маршрутов в отдельном файле - просто создать этот файл и экспортировать свой собственный маршрутизатор. Затем он назначает маршруты маршрутизатору (не app
) и, таким образом, другому файлу вообще не нужен объект app
. Поскольку вы показываете module.exports = router
, похоже, у вас есть часть этой техники, но только ее часть.
Вот как код будет работать, чтобы сделать это таким образом:
// app.js
const express = require('express');
const app = express();
const helpers = require('./helpers');
app.use((req, res, next) => {
app.locals.h = helpers;
next();
});
// hook in routes from the index.js router
app.use('/', require('./index'));
app.set('views',(__dirname));
app.set('view engine', 'pug');
app.listen(3000,()=>console.log('port 3000'));
// index.js
const router = require('express').Router();
router.get('/',(req,res) => {
res.render('template');
});
module.exports = router;
Вы также можете передать app
в index.js
при загрузке, а не пытаться импортировать app
. Это также решает проблему циклической зависимости.
const express = require('express');
const app = express();
const helpers = require('./helpers');
// pass app here so it can register routes
require('./index')(app);
app.use((req, res, next) => {
app.locals.h = helpers;
next();
});
app.use('/', routes);
app.set('views',(__dirname));
app.set('view engine', 'pug');
app.listen(3000,()=>console.log('port 3000'));
Измените index.js, чтобы экспортировать вызываемый вами конструктор модуля и передать app
в:
module.exports = function(app) {
app.get('/',(req,res) => {
res.render('template');
})
}