前后端分离多用户社区项目实战---前端01

Vue前端页面开发

1、前言

技术栈:

  • Vue
  • Vuex
  • Vue Router
  • Axios
  • Bulma
  • Buefy
  • Layui
  • Vditor
  • DarkReader

2、项目演示

3、环境搭建

安装Vue的环境,Vue官方文档

1、Nodejs安装

  • Node.js:http://nodejs.cn/download/
    安装就是无脑的下一步就好,安装在自己的环境目录下

  • 检查时候安装成功

    • cmd下输入node -v,查看是否能够正确打印出版本号即可!
    • cmd下输入npm -v,查看是否能够正确打印出版本号即可!
    • 这个npm,就是一个软件包管理工具,就和linux下的apt软件安装差不多!
  • 修改全局依赖包下载路径

    可以通过npm root -g 查看当前存放的位置

    我们不想让全局包放在这里,我们可以自定义存放目录,在CMD窗口执行以下两条命令修改默认路径:

    npm config set prefix "D:\Program Files (x86)\nodejs\node_global"
    
    npm config set cache "D:\Program Files (x86)\nodejs\node_globalnode_cache"
    
  • 设置淘宝源,让我们下载速度快的飞起

    # 安装淘宝npm
    npm config set registry http://registry.npm.taobao.org/
    
  • 安装 vue-cli

    # vue-cli 安装依赖包
    npm install -g vue-cli
    

4、新建项目

参考官方文档:https://cli.vuejs.org/zh/guide/creating-a-project.html

可以通过vue create或者vue ui创建项目,这里我使用vue ui,是@vue/cli3.0增加一个可视化项目管理工具,可以运行项目、打包项目,检查等操作。

# 打开vue的可视化管理工具界面
vue ui

运行vue ui之后,会为我们打开一个http://localhost:8080的页面:

然后点击创建,填写项目名称

注意:创建的目录最好是和你运行vue ui同一级。这样方便管理和切换。

下一步,选择【手动】,再点击下一步,如图点击按钮,勾选上路由Router、状态管理Vuex,去掉js的校验【正式项目中加上】。

下一步,也选上【Use history mode for router】,点击创建项目,然后弹窗中选择按钮【创建项目,不保存预设】,就进入项目创建啦。

上述步骤,帮助我们创建了一个vue项目,并且安装了Router、Vuex。这样我们后面就可以直接使用。

我们可以看一下vueblog-vue的项目结构

在创建vue 的项目中执行http://localhost:8080/

我们得到


将项目用idea打开,安装vue插件

我们可以从package.json中看到,我们已经引入的依赖

"dependencies": {
  "core-js": "^3.6.5",
  "vue": "^2.6.11",
  "vue-router": "^3.2.0",
  "vuex": "^3.4.0"
}

安装buefy

官网:https://buefy.org/

在我们的项目根目录用命令

# 安装buefy,帮助我们写css
npm install buefy

在main.js中引入buefy依赖

//引入buefy
import Buefy from "buefy";
import 'buefy/dist/buefy.css'

Vue.use(Buefy);

以上代码便完成了 Element 的引入。需要注意的是,样式文件需要单独引入。

安装element-ui

安装element-ui组件(https://element.eleme.cn/#/zh-CN/component/installation), 帮助我们开发出好看的博客页面

在我们的项目根目录用命令

# 安装element-ui
npm install element-ui -S

在main.js中引入elementui依赖

//引入elementui
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';

Vue.use(ElementUI);

以上代码便完成了 Element 的引入。需要注意的是,样式文件需要单独引入。

安装Axios

接下来,安装Axios(http://www.axios-js.com/zh-cn/docs/

使用 npm:

npm install --save axios vue-axios

将下面代码加入main.js:

import axios from 'axios'
import VueAxios from 'vue-axios'

Vue.use(VueAxios, axios)

我们可以利用Axios完成,从浏览器中创建、转换请求数据和响应数据、拦截请求和响应

组件中,我们就可以通过this.$axios.get()来发起我们的请求了。

创建request.js用于处理axios请求

  • 配置axios的baseURL

  • 请求拦截器request,发请求前做的一些处理、接收到响应数据并成功后的处理

  • 设置cross跨域

  • utils.request.js

import axios from 'axios'
import { Message, MessageBox } from 'element-ui'
import store from '@/store'
import { getToken } from '@/utils/auth'

// 1.创建axios实例
const service = axios.create({
    // 公共接口--这里注意后面会讲,url = base url + request url
    baseURL: process.env.VUE_APP_SERVER_URL,

    // baseURL: 'https://api.example.com',
    // 超时时间 单位是ms,这里设置了5s的超时时间
    timeout: 5 * 1000
})

// 2.请求拦截器request interceptor
service.interceptors.request.use(
    config => {
        // 发请求前做的一些处理,数据转化,配置请求头,设置token,设置loading等,根据需求去添加
        // 注意使用token的时候需要引入cookie方法或者用本地localStorage等方法,推荐js-cookie
        if (store.getters.token) {
            // config.params = {'token': token}    // 如果要求携带在参数中
            // config.headers.token = token;       // 如果要求携带在请求头中
            // bearer:w3c规范
            config.headers['Authorization'] = 'Bearer ' + getToken()
        }
        return config
    },
    error => {
        // do something with request error
        // console.log(error) // for debug
        return Promise.reject(error)
    }
)

// 设置cross跨域 并设置访问权限 允许跨域携带cookie信息,使用JWT可关闭
service.defaults.withCredentials = false

service.interceptors.response.use(
    // 接收到响应数据并成功后的一些共有的处理,关闭loading等
    response => {
        const res = response.data
        // 如果自定义代码不是200,则将其判断为错误。
        if (res.code !== 200) {
            // 50008: 非法Token; 50012: 异地登录; 50014: Token失效;
            if (res.code === 401 || res.code === 50012 || res.code === 50014) {
                // 重新登录
                MessageBox.confirm('会话失效,您可以留在当前页面,或重新登录', '权限不足', {
                    confirmButtonText: '确定',
                    cancelButtonText: '取消',
                    type: 'warning',
                    center: true
                }).then(() => {
                    window.location.href = '#/login'
                })
            } else { // 其他异常直接提示
                Message({
                    showClose: true,
                    message: '⚠' + res.message || 'Error',
                    type: 'error',
                    duration: 3 * 1000
                })
            }
            return Promise.reject(new Error(res.message || 'Error'))
        } else {
            return res
        }
    },
    error => {
        /** *** 接收到异常响应的处理开始 *****/
        // console.log('err' + error) // for debug
        Message({
            showClose: true,
            message: error.message,
            type: 'error',
            duration: 5 * 1000
        })
        return Promise.reject(error)
    }
)
export default service

上面代码

// 公共接口--这里注意后面会讲,url = base url + request url
baseURL: process.env.VUE_APP_SERVER_URL,

用到了env,系统配置文件,我们在和package.json文件同目录下创建.env文件,比如配置baseURL

VUE_APP_SERVER_URL = 'http://127.0.0.1:8081'

设置cross跨域

// 设置cross跨域 并设置访问权限 允许跨域携带cookie信息,使用JWT可关闭
service.defaults.withCredentials = false

前后端端口不一样肯定会存在跨域问题,这里处理了前端跨域问题,后台也需要配置

前端api

类似于后端一样,我们在src下创建一个api文件夹,用于封装访问api的请求

  • api/billboard.js
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342

推荐阅读更多精彩内容