Исключить маршрут по умолчанию из файла index.js в приложении Express.js - PullRequest
0 голосов
/ 23 января 2019

У меня есть приложение Express, где структура выглядит следующим образом

server/
  |---/model
  |---/routes
  |---/controllers
  |---index.js

В моем файле index.js я обрабатываю маршрут по умолчанию для item

//index.js
const item = require('./routes/item');
const app = express();

// Endpoint for all operations related with /item
app.use('/item', item);

В каталоге маршрутовУ меня есть файл item.js

//item.js

const express = require('express');

const router = express.Router();

const {
  deleteItemById,
  itemCreate,
  getItemById,
  updateItem
} = require('../controllers/item');

// Add new product
router.post('/create', itemCreate);

// Get product by id
router.get('/:id', getItemById);

// Delete product by id
router.delete('/:id/delete', deleteItemById);

// Update product by id
router.patch('/:id/update', updateItem);

module.exports = router;

Вопрос в том, как я могу исключить строку app.use('/item', item); для полной обработки этого маршрута в файле route / item.js?Чтобы иметь что-то подобное в файле item.js:

router.use('/item')
router.post('foo bar')
router.get('foo bar); 

и только в моем индексе require('./routes/item.js)

Ответы [ 2 ]

0 голосов
/ 23 января 2019

Я не думаю, что вы можете делать именно то, что вы хотите, но вы можете быть ближе, экспортируя функцию из item.js:

// item.js
const express = require('express')
const router = express.Router()

...

module.exports = (app) => app.use('/item', router)

... и затем передать ему app в index.js:

// index.js
const express = require('express')
const app = express()

require('./routes/item')(app)

Надеюсь, это поможет.

0 голосов
/ 23 января 2019

Я использую этот подход для обработки маршрутов внутри модулей:

// Init Express
const express = require ( 'express' );
const app = express ();

// Create a router (I use this approach to create multiple routers)
const apiRouter = express.Router ({});

// Include the routes module
require ( './api/v1.0/routes/item' ) ( apiRouter );


// ./api/v1.0/routes/item
module.exports = router => {

    const itemController = require ( '../controllers/test' );

    // Define routes here
    router.post ( '/items', [
        itemController.doPost
    ] );
    router.get ( '/item/:id', [
        itemController.getItem
    ] );

};

Таким образом, я создаю отдельный объект маршрутизатора, чтобы при необходимости можно было создать несколько маршрутизаторов (один для приложения пользовательского интерфейса, одиндля API и т. д.).

Надеюсь, это поможет ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...