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.vue、NewsAdd.vue、NewsEdit.vue分别对应新闻的列表、添加、编辑页面。 - API 调用:
src/api/news.ts(如有)或index.ts里封装了对后端新闻接口的请求。 - 用户操作:用户在页面上进行增删改查操作,前端通过 API 请求后端接口,完成数据的同步。
- 页面:
2. 你们是如何做“文章”编辑和新增页面的表单校验和数据回显的?
答案:
- 表单校验:在
web-admin/src/views/news-manage/NewsAdd.vue和NewsEdit.vue中,使用了 Vue 的表单组件(如<el-form>,如果用的是 Element Plus),通过rules属性定义必填项、长度限制等校验规则,用户提交前会自动校验。 - 数据回显:编辑页面(
NewsEdit.vue)在created或mounted钩子中,通过新闻 ID 调用后端接口获取当前新闻详情(如GET /admin/news/:id),然后将返回的数据赋值给表单的model,实现数据回显。
3. 你们的“文章”删除操作是物理删除还是逻辑删除?为什么这样设计?
答案:
- 实现方式:在后端
controllers/admin/NewsController.js的删除接口中,通常采用物理删除(直接从数据库移除记录),但如果有“回收站”或“恢复”功能,则会采用逻辑删除(如设置isDeleted字段)。 - 设计原因:如果新闻误删后需要恢复,建议用逻辑删除;如果数据量大且不需要恢复,则用物理删除。项目中如需支持“回收站”,可在
NewsModel.js增加isDeleted字段,并在查询时过滤。
4. 你们是如何做“文章”列表的分页和搜索的?前后端如何配合?
答案:
- 后端:在
controllers/admin/NewsController.js的列表接口(如GET /admin/news)中,支持接收page、pageSize、keyword等参数,服务层用这些参数查询数据库并返回分页数据和总数。 - 前端:在
NewsList.vue中,使用分页组件(如<el-pagination>),监听分页和搜索事件,调用 API 传递相应参数,渲染返回的新闻列表和分页信息。
5. 你们项目的“文章”权限控制是如何实现的?哪些用户可以操作文章?
答案:
- 后端:在
routes/admin/NewsRouter.js中,所有新闻相关接口都加了权限中间件(如middleware/AuthMiddleware.js),只有登录且有管理员权限的用户才能访问。 - 前端:在
web-admin端,只有管理员登录后才能看到新闻管理菜单(src/components/SideMenu.vue通过用户角色动态渲染菜单)。 - 具体实现:用户登录后,后端返回 token,前端存储 token 并在请求头中携带,后端中间件校验 token 和用户角色,决定是否放行。