我有一个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)
答案 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等)。
希望这会有所帮助。