Я занимаюсь с NodeJS и Express в течение нескольких дней, и это довольно круто. Но я столкнулся с проблемой, с которой я не могу разобраться, поэтому я надеюсь, что кто-то другой может помочь мне разобраться в этом.ExpressJS - модуль маршрутизатора с параметрами
Я знаю, что могу объявить модуль, а затем передать параметры в этот модуль с помощью метода require
.
--- App.js ----
var foo = require('./modules/Foo.js');
foo.config();
var bar= {}
require('./modules/Bar.js)(bar, foo)
--- Bar.js ---
module.exports = function(Bar, Foo) {
Bar.act = function(){
Foo.do();
}
}
Я думаю, что это гораздо более чистый дизайн, чем того, чтобы требовать Foo
в каждом модуле, который потребует его использования. Мне также не нужно выполнять инициализацию в каждом модуле, который этого требует.
Но затем приходит Router
, и я не могу понять, как это работает. Большинство примеров там требуется маршрутизатор в каждом модуле, что-то вроде этого:
--- App.js ----
var index = require('./views/index.js');
app.use('/', index);
--- Index.js ---
var express = require('express');
var router = express.Router();
var foo = require('../modules/Foo.js);
foo.config();
router.get('/', function (req, res) {
foo.do();
res.render('index');
})
module.exports = router
Но тогда, мне нужно требовать, чтобы все модули, используемые в index.js
вручную. То, что я действительно хотел бы сделать что-то вроде этого:
--- App.js ----
var foo = require('../modules/Foo.js);
foo.config();
var index = require('./views/index.js')(foo);
app.use('/', index);
--- Index.js ---
var express = require('express');
var router = express.Router();
module.exports = function(foo){
router.get('/', function (req, res) {
foo.do();
res.render('index');
})
}
Но писать об этом так, компилятор говорит мне «Router.use() требует промежуточного ПО, получил неопределенный». Я могу посмотреть, откуда эта ошибка, (module.exports
не возвращает объект), но так как я могу структурировать свой код, чтобы передать параметры модулю, который в конце будет экспортировать промежуточное программное обеспечение маршрутизатора? Я хочу потребовать и инициализировать Foo
в одном месте, а затем передать его всем модулям маршрутизатора, которые его используют. Возможно ли это как-то?
Это сработало. Большое спасибо ^. ^ – Gikkman