路由架构的最佳实践



我正试图为我的后端设置路由。我尝试了两种方法来设置这些路线,我想知道哪种方法最适合实践(或者两者都不适合?)差别很小,但我想知道是否有一个"最佳"目标。这里。

以下是我的尝试:

const express = require("express");
const router = express.Router();
const flashcardController = require('../controllers/flashcardController');
router.get('/', flashcardController.readFlashcard);
router.post('/', flashcardController.createFlashcard);
router.patch('/', flashcardController.updateFlashcard);
router.delete('/', flashcardController.deleteFlashcard);
module.exports = router

const express = require("express");
const router = express.Router();
const flashcardController = require('../controllers/flashcardController');

module.exports = (app) => {
router.get('/api/flashcard', flashcardController.readFlashcard);
router.post('/api/flashcard', flashcardController.createFlashcard);
router.patch('/api/flashcard', flashcardController.updateFlashcard);
router.delete('/api/flashcard', flashcardController.deleteFlashcard);
app.use('/', router);
};

当然,我的app.js(后端入口点)文件需要对每个选项进行稍微不同的编码。

如果你认为路由器的工作只是处理它收到的一些请求,而调用代码的工作是将路由器放置在调用代码希望它操作的任何路径上,那么只有你的第一个选项可以做到这一点。这将允许调用者在任何它想要的路径上使用这些路由。

如果你想让实现路由的模块完全自给自足,并把路由安装在它想要它们所在的路径上,那么只有第二个选项能做到这一点。

我想说的是"平常的"。更"灵活"。方案是第一个调用者将路由放在它想要的路径上的方案。但是,您可以自由选择您想要的样式。

第二个选项的实现不是特别有效,因此可以改进。根本不需要路由器,因为路由可以直接安装在app对象上。并且,可以避免多次重复/api/flashcard

例如,第二个选项可以是:

const controller = require('../controllers/flashcardController');
const routePath = '/api/flashcard';
module.exports = (app) => {
app.get(routePath, controller.readFlashcard);
app.post(routePath, controller.createFlashcard);
app.patch(routePath, controller.updateFlashcard);
app.delete(routePath, controller.deleteFlashcard);
};

或者,甚至只是这个:

const controller = require('../controllers/flashcardController');
module.exports = (app) => {
app.route('/api/flashcard')
.get(controller.readFlashcard)
.post(controller.createFlashcard)
.patch(controller.updateFlashcard)
.delete(controller.deleteFlashcard);
};

第一个可以简化为:

const router = require("express").Router();
const controller = require('../controllers/flashcardController');
router.route('/')
.get(controller.readFlashcard)
.post(controller.createFlashcard)
.patch(controller.updateFlashcard)
.delete(controller.deleteFlashcard);
module.exports = router

最新更新