#javascript #node.js #express #module #node-modules
#javascript #node.js #выразить #модуль #модули узла
Вопрос:
Так что, возможно, на первый взгляд это звучит довольно сложно.Я объясню, что я на самом деле хочу сделать: я работаю с NodeJS amp; ExpressJS и пытаюсь модулировать проект, вот что я хочу сделать: Допустим, у меня есть в главном файле server .js router.get / post / put / delete и т.д., разделенный На некоторые другие файлы для каждого типа: Например :
...
app.use(require('./routes/account_method1.js'));
app.use(require('./routes/account_method2.js'));
app.use(require('./routes/games_method1.js'));
app.use(require('./routes/games_method3.js'));
app.use(require('./routes/emails_method5.js'));
...
Я выполнил это довольно просто: я просто использовал код, упомянутый выше, в основном файле .js и в необходимых файлах, которые я только что поместил :
module.exports = router;
И это в значительной степени все.Но проблема в том, что :
Теперь я хочу сделать что-то вроде :
...
app.use(require('./routes/account/panel.js'));
app.use(require('./routes/games/panel.js'));
app.use(require('./routes/emails/panel.js'));
...
И в каждом ./routes/x/panel.js файл, в котором должны быть определенные файлы .js, необходимые для использования, для простого примера в ./routes/account.panel.js Я хотел бы иметь и работать :
app.use(require('./account_method1.js'));
app.use(require('./account_method2.js'));
Предполагая account_method1.js и account_method2.js находятся в том же каталоге, что и конкретный panel.js файл.И затем, требуйте этих panel.js файлы в главном файле server .js.
Итак, если теперь у меня есть :
Server ---> ./routes/account_method1.js
---> ./routes/account_method2.js
Я хотел бы сделать это :
Server ---> ./routes/account/panel.js ---> ./routes/account_method1.js
./routes/account_method2.js
Я не буду вставлять сюда какой-либо код, потому что это просто проблема со способом импорта файлов, и я уже упоминал, как мне требуются мои файлы .js на главном сервере.
Су…что вы думаете?
Редактировать :
Я думаю, это покажет вам, в чем проблема :
./routes/test.js (этот файл должен добавить в приложение другой файл,register.js )
const express = require('express');
const router = express.Router();
console.log("BEFORE ROUTER.USE");
router.use(require('./register.js'));
console.log("AFTER ROUTER.USE");
module.exports = router;
./app.js (основной файл сервера .js)
....
var test = require('./routes/test.js');
app.use(test);
....
./routes/register.js
const express = require('express');
const router = express.Router();
...
//some router.post / get / delete
...
module.exports = router;
И когда я пытаюсь получить доступ к URL-адресам из этого register.js файл, в котором они не работают
Комментарии:
1. используйте ../ для доступа к родительской папке. требовать (‘./ ../account_method1.js ‘)
2. Спасибо за помощь, но я уже знаю это, и это не то, что я ищу. Не могли бы вы, пожалуйста, подробнее ознакомиться с последней частью моего поста, где я пытался объяснить свою проблему с использованием какой-то схемы?
3. Привет! На мой взгляд, это не проблема разработчика, а проблема архитектуры. Вы думали о микросервисах? Если у каждой панели мониторинга есть одна ответственность, возможно, будет лучше разделить их в разных проектах, даже если они используют одну и ту же базу данных.
4. RTFM xD
router.use([path], [function, ...] function)
используетсяpatch
для добавления префикса маршрутизации, напримерrouter.use('/panel', router.use('/users', router.get('/newest, (req, res)=>{})))
дляhttp:://example.com/panel/user/newest
Ответ №1:
Лучший способ — использовать маршрутизатор:
например: controller/api.js
const express = require('express')
const router = express.Router()
router.get('/', function(req, res) {
//console.log(res.apiData);
res.json({message:'ok'});
});
module.exports = router;
и более поздние версии
app.use('/api', require('controller/api'))
Маршрутизатор может быть импортирован на другой маршрутизатор. Я использую это:
main.js:
app.use(require('./controller'));
controller/index.js:
const express = require('express')
const router = express.Router()
const isAuth = require('../middlewares/is-auth')
const isValidApiKey = require('../middlewares/is-api-key')
const isAdmin = require('../middlewares/is-admin')
router.use('/auth', require('./auth'));
router.use('/profile', isAuth, require('./profile'));
router.use('/api', isValidApiKey, require('./api'));
router.use('/admin', isAuth, isAdmin, require('./admin'))
Если код службы запроса длинный, вы также можете переместить его в отдельный файл, но я думаю, что лучше разделить его на более мелкие, повторно используемые части и использовать его в качестве промежуточного программного обеспечения, например:
route.all('/:orderId(\d )', fileOrderMiddleware, fileAltMiddleware, hasTransferMiddleware, orderServeMiddleware);
Комментарии:
1. Здравствуйте и спасибо за помощь. Именно так я сейчас вызываю свои функции .js. Но как вы можете выполнить ту же
app.use('/url',require());
операцию вcontroller/api.js
, что и в главном файле сервера .js?2. «Маршрутизатор может быть импортирован на другой маршрутизатор». Это сработало! Большое вам спасибо!