在Express.js应用中排除来自index.js文件的默认路由

时间:2019-01-23 08:23:20

标签: javascript node.js express

我有一个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);行以在routes / item.js文件中完全处理此路由? 在item.js文件中包含以下内容:

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

并且仅在我的索引中require('./routes/item.js)

2 个答案:

答案 0 :(得分:1)

我认为您无法完全完成所需的工作,但可以通过从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)

我希望这会有所帮助。

答案 1 :(得分:0)

这是我用于处理模块内路由的方法:

// 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
    ] );

};

我以此方式创建了一个单独的路由器对象,以便可以根据需要创建多个路由器。(一个用于UI应用程序,一个用于API等)。

希望这会有所帮助。