如何在 Node.js 和 Express 上分离 CRUD 路由?

问题描述 投票:0回答:2

当您希望将模型的所有 CRUD 操作都放在一个文件中时,可以按照我们的第一种方法来完成:

routes.js

const express = require("express");
const users = require("../routes/users");

module.exports = function (app) {
    app.use(express.json());
    app.use("/api/user", users);
};

users.js

router.patch("/", auth, async (req, res) => {
    // create and update operations ...
})

router.delete("/:id", auth, async (req, res) => {
    // delete operations ...
})
module.exports = router



但是如果我们想要以这种形式为 CRUD 提供单独的文件作为第二种方法怎么办?
用户
|__patchUser.js
|__deleteUser.js
|__index.js

我希望索引文件类似于:
index.js

const express = require("express");
const router = express.Router();
module.exports = router;

其他分离的文件如下:
patchUser.js

const router = require("./index");

router.patch("/", auth, async (req, res) => {

})

但这不起作用。

如何纠正第二种方法将CRUD路由文件分开?

javascript express routes ecmascript-5
2个回答
3
投票

您应该遵循这个架构。 在index.js文件中你应该只调用路由。例如,userRoutes、productRoutes。

index.js

 const express = require('express');
 const userRoutes = require('./routes/user);
    
 const app = express();
 app.use('/api/user',userRoutes);

路线文件夹中
用户.js

const router = require('express')().Router;
const patchUser = require('./controllers/user/PatchUser');
const deleteUser = require('./controllers/user/DeleteUser');
const auth = require('./middleware/auth);
//keep middlewares in middleware files

router.patch('/',auth,patchUser);
router.delete('/:id',auth,deleteUser);

module.exports = router;

控制器文件夹中
用户文件夹

补丁用户.js

const patchUser = async(req,res,next)=>{
//todo
}

module.exports = patchUser;

删除User.js

const deleteUser = async(req,res,next)=>{
//todo
}
module.exports = deleteUser;

为了简单起见,您应该按照以下步骤操作:

  1. 在controllers/user/中创建PatchUser.js文件。
  2. 在routes中创建userRoutes.js文件。
  3. 修改index.js文件。
  4. 在controllers/user/中创建DeleteUser.js文件。
  5. 修改userRoutes.js文件
  6. 修改index.js文件

一开始,你可能会发现这很困难,但随着时间和练习,你会发现它非常容易,这是干净架构的第一步。

我希望你也在寻找同样的东西。


0
投票

如果想要在 Node js 中简单地处理 json 此链接:https://github.com/ismailsamudra/expert-json

© www.soinside.com 2019 - 2024. All rights reserved.