多人博客项目
title: 多人博客项目date: 2019-11-27 15:53:44
tags: 项目
blog3
说明
使用Vue-cli3搭建,高度集成webpack,不暴露webpack配置,相应插件需要自行创建vue.config.js,在其中配置.
前后端接口约定
后端接口规范
- 当前接口路径
- 当前接口提交数据类型,如:
GET: 获取数据
POST: 提交或者创建
PUT: 修改数据
DELETE: 删除数据
PATCH: 修改数据,部分修改
- 参数类型格式: json或者application/x-www-form-urlencoded的数据
- 参数字段及限制条件
- 返回成功的数据格式
- 返回失败的数据格式
下面和后端做以下接口约定,开发阶段使用postman或者curl命令测试接口
认证相关
POST /auth/register
功能: 用户注册
提交参数
参数类型: Content-type: application/x-www-form-urlencoded;chratset=utf-8
参数字段:
username: 用户名,长度1-15个字符,只能是字母数字下划线
password: 密码,长度6-16位任意字符
返回数据
失败:
返回格式: {"status": "fail", "msg": "错误原因"}
成功:
返回格式:
1 | { |
测试命令
# -d用来传递数据
# 对于POST和PUT可以: -X POST,对于GET,不加-X
curl -d "usernme=Tom&password=123456" -X POST "http://localhost:3000/auth/regitster"
GET /auth/login
功能: 用户登录
提交参数
参数类型: Content-type: application/x-www-form-urlencoded;chratset=utf-8
参数字段:
1 | username: 用户名,长度1-15个字符,只能是字母数字下划线 |
返回数据
失败:
1 | 返回格式: `{"status": "fail", "msg": "用户不存在"}或者 {"status": "fail", "msg": "密码不正确"}` |
成功:
返回格式:
1 | { |
测试命令
# -d用来传递数据
# -i 可以显示响应头
# 会发现响应头里有setCookie信息,得到cookie
curl -d "usernme=Tom&password=123456" "http://localhost:3000/auth/login" -i
GET /auth
功能: 判断用户是否登录
提交参数: 无
返回数据:
已经登录的情况
返回格式:
1 | { |
没有登录的情况
1 | { |
测试命令
#先通过登录接口获取 cookie,带上 cookie 就能测试登录
curl "http://localhost:3000/auth" -b "connect.sid=s%3AmeDbrn03UtTM8fqChaPQ20wmWlnKeHiu.e3uMtu7j1zQ1iNeaajCmxkYYGQ%2FyHV1ZsozMvZYWC6s"
GET /auth/logout
功能: 注销登录
提交参数:无
返回数据:
1 | 失败: |
测试命令
curl "http://localhost:3000/auth/logout" -b "connect.sid=s%3AmeDbrn03UtTM8fqChaPQ20wmWlnKeHiu.e3uMtu7j1zQ1iNeaajCmxkYYGQ%2FyHV11ZsozMvZYWC6s"
博客相关
GET /blog
功能: 获取博客列表
提交参数:
1 | page: 页码,不传默认为1. |
如 /blog?page=2&userId=1 获取属于用户1的第二页博客列表
返回数据:
1 | 失败: { "status": "系统异常"} |
成功:
返回格式:
1 | { |
测试命令
curl "http://localhost:3000/blog?page=1&userId=1"
curl "http://localhost:3000/blog?page=1"
curl "http://localhost:3000/blog"
GET /blog/:blogId
功能: 获取id为blogId的博客详情,如 /blog/1
提交参数: 无
返回数据:
失败: { "status": "fail", "msg": "系统异常"}
成功:
返回格式:
1 | { |
POST /blog
功能: 创建博客
提交参数:
1 | 参数类型: Content-type: application/x-www-form-urlencoded; charset=utf-8; |
返回数据:
1 | 失败: { "status": "fail", "msg": "登录后才能操作"} |
成功:
返回格式:
1 | { |
测试命令
curl -d "title=hello&content=world&description=jirengu" -X POST "http://localhost:3000/blog" -b "connect.sid=s%3AdyZh-z5fqPU_ThG9Qn8nGD6euI0UI75e.8uso0k4P6WzqWv02iQCUwxbUML2RdlOCnpKp7RSJpj0"
PATCH /blog/:blogid
功能: 修改博客id为:blogid的博客
范例: /blog/1
提交参数
参数类型: Content-Type: application/x-www-form-urlencoded; charset=utf-8
参数字段:
1 | title: 博客标题 |
返回数据
失败
返回格式:
1 | {"status": "fail", "msg": "登录后才能操作"} |
成功
返回格式:
1 | { |
测试命令
curl -d "title=hello100&content=world1&description=jirengu2234444444&atIndex=true" -X PATCH "http://localhost:3000/blog/12" -b "connect.sid=s%3At_9V2bMXA7U9oSAmr1dhRXpdRPAsNM2B.jlpWgkwiWdpgTjexeTHGNydt8gvc%2F%2BEkJpQ9yaAmTg0"
DELETE /bog/:blogid
功能: 删除id为:blogid的博客
提交参数:无
返回数据
失败
返回格式范例
1 | {"status": "fail", "msg": "登录后才能操作"} |
成功
返回格式
1 | { |
测试命令
curl -X DELETE "http://localhost:3000/blog/12" -b "connect.sid=s%3AG_Chytg2F0RLWh2wTSCdLWVxpNg1MWWb.nPuMcgyMN6zxuxjSkyu8qSqM1boruol1Nce7egaXrPw"
文件介绍
main.js
项目入口
1 | import Vue,app,router from ... |
App.vue
当前整个项目的模板
tempalte,js,style
component/xxx.vue
各个组件,也可以同名的文件夹,包含vue,css,js
router.js
路由组件
请求接口封装
helpers/request.js
请求组件
import axios
//约定请求文件格式
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'
//接口路径
axios.defaults.baseURL = 'http://blog-server.hunger-valley.com'
//前后端分离,即使异步请求也带上cookie
axios.defaults.withCredentials = true
//函数导出
export default function request(){ ... }
api接口封装
@/api/auth.js
//引入请求接口
import request from '@/helpers/request'
把各个接口进行封装,便于后续调用
1 | const URL = { |
封装blog接口
同样引入请求接口
import request from '@/helpers/request'
封装blog的各个接口
1 | const URL = { |
首页布局
…
状态管理
store.js
1 | // @/assets/moudles/auth.js |
在 header.vue 中调用 vuex 中的参数
1 | //header.vue |
登录和注册
1 | // Login/template.vue |
1 | //Login/template.js |
注册
注册类似于登录
将 login 换成 register 即可.
路由组件 router.js
1 | import Vue from "vue"; |
创建博客页面
1 | <template> |
完善首页
详情页
时间插件
1 | function friendlyDate(datsStr) { |
个人页面 user
有点东西
登陆者的个人页面 my
遇到过的问题
- vuex 中 actions 错误(原因: modules 拼错了)
- 登录时 enter 无法使用.(解决方法: 加.native)
- 文章内容应有一定区域(原因: 没写 palceholder)
- 编辑时少一个设置为首页的按钮(原因:按钮初始颜色透明)
- my 页面无法显示(原因: 因为错误 6)
- 过滤器 getMouth 错误,(原因: mouth 单词拼错)
- my 页面编辑删除两个按钮靠的太近
- header 布局错误(原因: h1 标签没有把 router-link 包裹,如果包裹,less 有设置 h1 下 a 标签的颜色为白色.
没有包裹的时候,a 标签的颜色是 common.less 设置的黑色,会覆盖)
标题颜色错误,把标题文本和普通文本颜色算在一起了.