代码之家  ›  专栏  ›  技术社区  ›  p7adams

在express.js应用程序中排除默认路由index.js文件

  •  0
  • p7adams  · 技术社区  · 7 年前

    我有一个快速应用程序,结构是这样的

    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 回复  |  直到 7 年前
        1
  •  1
  •   Steve Holgado    7 年前

    我不认为你可以做你想做的事情,但是你可以通过从 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)
    

    我希望这有帮助。

        2
  •  0
  •   TheFoot    7 年前

    这是我在模块内处理路由时使用的方法:

    // 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等)。

    希望这有帮助。

    推荐文章