文章的增删改查

72 阅读3分钟

1. 你们项目的“文章”是如何实现增删改查(CRUD)的?请简述前后端的主要流程。

答案:
在本项目中,“文章”主要指新闻(News),其 CRUD 功能由前后端协作实现:

  • 后端(web-server)

    • 路由:routes/admin/NewsRouter.js 定义了新闻的增删改查接口,如 POST /admin/news(新增)、PUT /admin/news/:id(修改)、DELETE /admin/news/:id(删除)、GET /admin/news(查询)。
    • 控制器:controllers/admin/NewsController.js 负责处理具体的业务逻辑,如接收参数、调用服务层、返回响应。
    • 服务层:services/admin/NewsService.js 负责与数据库交互,执行具体的增删改查操作。
    • 数据模型:models/NewsModel.js 定义了新闻的数据结构和数据库映射。
  • 前端(web-admin)

    • 页面:src/views/news-manage/NewsList.vueNewsAdd.vueNewsEdit.vue 分别对应新闻的列表、添加、编辑页面。
    • API 调用:src/api/news.ts(如有)或 index.ts 里封装了对后端新闻接口的请求。
    • 用户操作:用户在页面上进行增删改查操作,前端通过 API 请求后端接口,完成数据的同步。

2. 你们是如何做“文章”编辑和新增页面的表单校验和数据回显的?

答案:

  • 表单校验:在 web-admin/src/views/news-manage/NewsAdd.vueNewsEdit.vue 中,使用了 Vue 的表单组件(如 <el-form>,如果用的是 Element Plus),通过 rules 属性定义必填项、长度限制等校验规则,用户提交前会自动校验。
  • 数据回显:编辑页面(NewsEdit.vue)在 createdmounted 钩子中,通过新闻 ID 调用后端接口获取当前新闻详情(如 GET /admin/news/:id),然后将返回的数据赋值给表单的 model,实现数据回显。

3. 你们的“文章”删除操作是物理删除还是逻辑删除?为什么这样设计?

答案:

  • 实现方式:在后端 controllers/admin/NewsController.js 的删除接口中,通常采用物理删除(直接从数据库移除记录),但如果有“回收站”或“恢复”功能,则会采用逻辑删除(如设置 isDeleted 字段)。
  • 设计原因:如果新闻误删后需要恢复,建议用逻辑删除;如果数据量大且不需要恢复,则用物理删除。项目中如需支持“回收站”,可在 NewsModel.js 增加 isDeleted 字段,并在查询时过滤。

4. 你们是如何做“文章”列表的分页和搜索的?前后端如何配合?

答案:

  • 后端:在 controllers/admin/NewsController.js 的列表接口(如 GET /admin/news)中,支持接收 pagepageSizekeyword 等参数,服务层用这些参数查询数据库并返回分页数据和总数。
  • 前端:在 NewsList.vue 中,使用分页组件(如 <el-pagination>),监听分页和搜索事件,调用 API 传递相应参数,渲染返回的新闻列表和分页信息。

5. 你们项目的“文章”权限控制是如何实现的?哪些用户可以操作文章?

答案:

  • 后端:在 routes/admin/NewsRouter.js 中,所有新闻相关接口都加了权限中间件(如 middleware/AuthMiddleware.js),只有登录且有管理员权限的用户才能访问。
  • 前端:在 web-admin 端,只有管理员登录后才能看到新闻管理菜单(src/components/SideMenu.vue 通过用户角色动态渲染菜单)。
  • 具体实现:用户登录后,后端返回 token,前端存储 token 并在请求头中携带,后端中间件校验 token 和用户角色,决定是否放行。