Как app.use () файл, у которого есть какое-то другое app.use () в NodeJS

#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. «Маршрутизатор может быть импортирован на другой маршрутизатор». Это сработало! Большое вам спасибо!