基于前端Vue整合NuxtJs框架的简单使用

简介: 基于前端Vue整合NuxtJs框架的简单使用,,新人可直接入手操作

nuxt简介

image.png

1. 利用nuxt下载脚手架

  1. 在指定磁盘黑窗口,命令下载脚手架
npx create-nuxt-app dada-resources
  1. 选项(全不选)
    image.png
  1. 如果是vue-cli脚手架转nuxt,可以自定义路由(本身nuxt是不需要自定义路由的),此步骤(3-5)是可以忽略的
cnpm install @nuxtjs/router -S
  1. 在配置nuxt.config.js文件中modules中加入
  modules: [
    '@nuxtjs/router'
  ],
  1. 修改store中的router.js配置
import Vue from 'vue';
import Router from 'vue-router';

Vue.use(Router)

import Index from '@/pages/index'

const routes = [
  {
   
    path : '/',
    component : Index
  },
]

export function createRouter() {
   
  return new Router({
   
    mode: "history",
    routes,
  })
}
  1. 引入elementui
 cnpm i element-ui -S
  1. 创建plugins文件夹,里面加入elementuijs
import Vue from 'vue';
import ElementUI from 'element-ui';
Vue.use(ElementUI);
  1. 在配置nuxt.config.js文件中modules中加入
  css: [
    '~/static/style.css',
    'element-ui/lib/theme-chalk/index.css',
  ],

  // Plugins to run before rendering page: https://go.nuxtjs.dev/config-plugins
  plugins: [
    '~/plugins/element.js'
  ],
  1. 安装axios和代理跨域
cnpm install @nuxtjs/axios @nuxtjs/proxy -S
  1. nuxt配置文件配置nuxt.config.js
  // 三方组件引入
  modules: [
    '@nuxtjs/router',
    '@nuxtjs/axios',
    '@nuxtjs/proxy',
  ],
  1. 设置跨域和代理nuxt.config.js
  //设置代理
  axios: {
   
    //是否可以跨域
    proxy: true,
    // baseUr: process.env._ENV === 'production' ? '' : '',
  },
  proxy: {
   
    '/api':{
   
      target : 'http://localhost:8001',
    }
  },
  1. axios的二次封装plugins目录
export default ({
    $axios, app, store }, inject) => {
   
  //请求拦截
  $axios.interceptors.request.use(
    (config) => {
   
      /** 如果接口需要携带请求头可以在此设置
       const baseHeaders = getAccessApiHeaders(app)
       config.headers = {
        ...baseHeaders,
        ...config.headers
      }
       */
      if (
        config.method === 'post' ||
        config.method === 'put' ||
        config.method === 'delete'
      ) {
   
        config.data = {
   
          ...config.data
        }
      } else if (config.method === 'get') {
   
        config.params = {
   
          ...config.params
        }
      }
      return config
    },
    (error) => {
   
      // 对请求错误做些什么
      return Promise.reject(error)
    }
  )
  //相应拦截
  $axios.interceptors.response.use(
    (response) => {
   
      //返回结果
      return response.data
    },
    (err) => {
   
      const status = err.response.status
      //其他错误情况统一处理
      const errorMsg = {
   
        code: -1,
        msg: '服务器内部错误',
        data: {
   
          status: status,
          message: err.response.statusText
        }
      }
      //返回数据
      return errorMsg
    }
  )
  //请求Api接口
  inject('requestApi', (url, data = {
   }, method = 'GET') => {
   
    if (method == 'GET') {
   
      return $axios.get(url, {
   
        params: data
      })
    } else {
   
      return $axios.post(url, data)
    }
  })
}
  1. 编写api文件
export default ({
   $axios }, inject) => {
   
  inject('getTest',function () {
   
    return $axios({
   
      url: '/link/getAllLink',
      method : 'get'
    })
  })

  //箭头函数
  inject('getTests',(id) => $axios({
   
    url: '/link/getAllLink',
    method : 'get',
    params: {
   id}
  }))
}
  1. 页面测试(页面级请求用asyncData,组件用用fetch
  • 页面调用使用
export default {
   
  name: 'IndexPage',
  data() {
   
    return {
   
      dataLists:[],
    };
  },

  //服务端请求接口
  async asyncData(app) {
   
    let data = await app.$getTest();
    let dataLists = data.data
    console.log(dataLists)
    return {
   dataLists}
  }, 
}
  • 组件调用接口使用
export default {
   
  name: "Header.vue",
  data() {
   
    return {
   
      dataList:[],
    };
  },
  //组件段渲染
  async fetch() {
   
    let dataList = await this.$getTest();
    console.log(dataList)
    this.dataList = dataList.data
  },
}

2. 关于token的使用

  1. 下载安装token
cnpm install cookie-universal-nuxt -S
  1. nuxt.config.js中配置cookie
  // 三方组件引入
  modules: [
    'cookie-universal-nuxt',
  ],
  1. 他的操作支持(伪代码)
this.$cookie.get(key)
this.$cookie.set(key,value)
this.$cookie.romove(key)
  1. store目录下创建index,和用户的登陆后的基本信息,来维护Vuex
  • index.js
import Vue from 'vue';
import Vuex from 'vuex';

Vue.use(Vuex);

import user from './moduler/user';

const store =()=> new Vuex.Store({
   
  modules: {
   
    user,
  }
})

export default store;
  • user.js
export default {
   
  state: {
   
    userInfo: {
   
      avatar: undefined,
      nickName: undefined,
      id: undefined,
    },
    token: undefined,
  },

  getters: {
   
    avatar: state => {
   
      console.log("getters用户信息:",state.userInfo)
      return state.userInfo.avatar
    },
    token: state => {
   
      console.log("getters用户Token:",state.token)
      return state.token
    }
  },

  mutations:{
   
    setToken(state,token) {
   
      console.log("mutations用户Token:",token)
      if (token) {
   
        //存储在vuex中
        state.token = token;
        //存储在浏览器中(时长7天)
        this.$cookies.set('token',token,{
   path:'/',maxAge: 60 *60 *24 *7})
        // this.$auth.$storage.setLocalStorage('token',token)
      }
    },
    saveUserInfo(state,payload){
   
      console.log("mutations用户信息:",payload)
      if (payload) {
   
        //存储在vuex中
        state.userInfo = payload
        //存储在浏览器中(时长7天)
        this.$cookies.set('userInfo',JSON.stringify(payload), {
   path:'/',maxAge: 60 *60 *24 *7})
        // this.$auth.$storage.setLocalStorage('userInfo',JSON.stringify(payload))
      }

    },
    //退出清空
    removeToken (state) {
   
      state.userInfo.avatar = undefined
      state.userInfo.nickName = undefined
      state.userInfo.id = undefined
      state.token = undefined
      console.log("退出操作用户信息:",state.userInfo)
      console.log("退出操作用户Token:",state.token)
      //删除浏览器中token
      this.$cookies.remove('token')
      this.$cookies.remove('userInfo')
    },
  }

}
  1. 创建服务端文件夹middleware创建一个auth.js的文件(其目的就是为了让客户端和服务端共享数据)
/**
 * 用户登录相关(服务端),意思就是服务端需要拿到token
 * @param app 里面的东西 是服务端和客户端 共有的
 * @param store
 * @param route
 * @param redirect
 */
export default ({
   app, store, route, redirect}) => {
   
  let token = app.$cookies.get('token')
  let userInfo = app.$cookies.get('userInfo')
  console.log('auth...',token)
  console.log('auth...',userInfo)
  app.store.commit('setToken',token)
  app.store.commit('saveUserInfo',userInfo)
}
  1. 在nuxt.config.js配置文件中加入自定义的数据
    在这里插入图片描述

  2. 在登录页面中使用vuex的数据据
    在这里插入图片描述

  3. 在自定义封装的axios中加入token的请求头信息

3.项目服务器部署

  1. 在本地执行
cnpm run build
  1. 将这四个文件放到服务器中
    在这里插入图片描述

  2. 在服务器中执行(不清楚什么情况cnpm镜像下载不全)

npm install
  1. 在服务器中启动项目
  • 前台启动,随时可以关闭
npm run start
  • 后台启动(需要下载pm2)
  • 格式:pm2 start cnpm --name "自定义名字" -- run start
pm2 start cnpm --name "dada-resources" -- run start
  1. 如遇到找不到镜像的情况,可以单独下载
cnpm install xxx
相关文章
|
2天前
|
存储 JavaScript 前端开发
使用Vue.js构建交互式前端的技术探索
【5月更文挑战第12天】Vue.js是渐进式前端框架,以其简洁和强大的特性深受开发者喜爱。它聚焦视图层,采用MVVM模式实现数据与视图的双向绑定,简化开发。核心特性包括响应式数据绑定、组件化、模板系统和虚拟DOM。通过创建Vue实例、编写模板及定义方法,可以构建交互式前端,如计数器应用。Vue.js让复杂、交互式的前端开发变得更加高效和易维护。
|
3天前
|
JSON JavaScript 前端开发
vue的 blob文件下载文件时,后端自定义异常,并返回json错误提示信息,前端捕获信息并展示给用户
vue的 blob文件下载文件时,后端自定义异常,并返回json错误提示信息,前端捕获信息并展示给用户
|
3天前
|
JSON JavaScript 前端开发
vue前端运行时出现RangeError: Maximum call stack size exceeded
vue前端运行时出现RangeError: Maximum call stack size exceeded
12 4
|
4天前
|
JavaScript 前端开发
深入了解前端框架Vue.js的响应式原理
本文将深入探讨Vue.js前端框架的核心特性之一——响应式原理。通过分析Vue.js中的数据绑定、依赖追踪和虚拟DOM等机制,读者将对Vue.js的响应式系统有更深入的理解,从而能够更好地利用Vue.js构建灵活、高效的前端应用。
|
5天前
|
JavaScript 前端开发
vue前端展示【1】
vue前端展示【1】
8 1
|
8天前
|
开发框架 前端开发 JavaScript
我们是否对现代前端开发框架过于崇拜了?
在当前环境下,前端的开发由于框架的限制,导致代码变差。我们应该如何破除代码差的困境,如何正确使用前端架构,提升自己的代码质量。
|
12天前
|
JSON JavaScript Java
从前端Vue到后端Spring Boot:接收JSON数据的正确姿势
从前端Vue到后端Spring Boot:接收JSON数据的正确姿势
22 0
|
14天前
|
前端开发 JavaScript 开发者
【专栏:HTML与CSS前端技术趋势篇】前端框架(React/Vue/Angular)与HTML/CSS的结合使用
【4月更文挑战第30天】前端框架React、Vue和Angular助力UI开发,通过组件化、状态管理和虚拟DOM提升效率。这些框架与HTML/CSS结合,使用模板语法、样式管理及组件化思想。未来趋势包括框架简化、Web组件标准采用和CSS在框架中角色的演变。开发者需紧跟技术发展,掌握新工具,提升开发效能。
|
14天前
|
Dart 数据处理 开发者
【Flutter前端技术开发专栏】Flutter是谷歌的开源移动框架,以其高性能和跨平台能力受开发者青睐。
【4月更文挑战第30天】Flutter是谷歌的开源移动框架,以其高性能和跨平台能力受开发者青睐。本文聚焦Flutter开发关键知识点:1) Dart语言和Flutter框架基础,如Widget和State;2) 路由管理,包括基本和命名路由,以及路由传值;3) 使用http、dio等库进行网络请求和数据处理;4) ThemeData定义应用主题,实现样式主题化。掌握这些技能将提升Flutter开发效率和应用质量。
|
14天前
|
存储 JavaScript 前端开发
【Flutter 前端技术开发专栏】Flutter 中的状态管理框架(如 Provider、Redux 等)
【4月更文挑战第30天】本文探讨了 Flutter 开发中的状态管理,重点介绍了 Provider 和 Redux 两种框架。Provider 以其简单易用性适合初学者和小项目,而 Redux 则适用于大型复杂应用,保证状态一致性。此外,还提到了 Riverpod 和 BLoC 等其他框架。选择框架时要考虑项目规模、团队技术水平和个人偏好。文章通过购物车应用示例展示了不同框架的使用,并展望了状态管理框架的未来发展。
【Flutter 前端技术开发专栏】Flutter 中的状态管理框架(如 Provider、Redux 等)