基于前端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配置文件中加入自定义的数据

在这里插入图片描述

  1. 在登录页面中使用vuex的数据据

在这里插入图片描述

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

3.项目服务器部署

  1. 在本地执行
cnpm run build
  1. 将这四个文件放到服务器中

在这里插入图片描述

  1. 在服务器中执行(不清楚什么情况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
相关文章
|
1月前
|
前端开发 JavaScript 开发者
颠覆传统:React框架如何引领前端开发的革命性变革
【10月更文挑战第32天】本文以问答形式探讨了React框架的特性和应用。React是一款由Facebook推出的JavaScript库,以其虚拟DOM机制和组件化设计,成为构建高性能单页面应用的理想选择。文章介绍了如何开始一个React项目、组件化思想的体现、性能优化方法、表单处理及路由实现等内容,帮助开发者更好地理解和使用React。
78 9
|
1月前
|
缓存 监控 JavaScript
Vue.js 框架下的性能优化策略与实践
Vue.js 框架下的性能优化策略与实践
|
1月前
|
前端开发 JavaScript API
前端界的秘密武器:掌握这些框架,让你轻松秒杀99%的同行!
前端开发日新月异,掌握几个明星框架如React、Vue.js和Angular,不仅能让工作更得心应手,还能轻松超越同行。React以高效的虚拟DOM和组件化著称;Vue.js简洁易懂,灵活性高;Angular提供全面的解决方案,适合大型应用。此外,轻量级的Svelte也值得关注,其编译时处理设计提升了应用性能。掌握这些框架,结合深刻理解和灵活运用,助你在前端领域脱颖而出。
32 9
|
1月前
|
JavaScript 前端开发 开发者
前端框架对比:Vue.js与Angular的优劣分析与选择建议
【10月更文挑战第27天】在前端开发领域,Vue.js和Angular是两个备受瞩目的框架。本文对比了两者的优劣,Vue.js以轻量级和易上手著称,适合快速开发小型到中型项目;Angular则由Google支持,功能全面,适合大型企业级应用。选择时需考虑项目需求、团队熟悉度和长期维护等因素。
54 1
|
1月前
|
前端开发 数据库
芋道框架审批流如何实现(Cloud+Vue3)
芋道框架审批流如何实现(Cloud+Vue3)
113 3
|
1月前
|
前端开发 JavaScript 开发者
React与Vue:前端框架的巅峰对决与选择策略
【10月更文挑战第23天】React与Vue:前端框架的巅峰对决与选择策略
|
1月前
|
JavaScript 前端开发 API
前端框架对比:Vue.js与Angular的优劣分析与选择建议
【10月更文挑战第26天】前端技术的飞速发展让开发者在构建用户界面时有了更多选择。本文对比了Vue.js和Angular两大框架,介绍了它们的特点和优劣,并给出了在实际项目中如何选择的建议。Vue.js轻量级、易上手,适合小型项目;Angular结构化、功能强大,适合大型项目。
43 1
|
1月前
|
前端开发 JavaScript 数据管理
React与Vue:两大前端框架的较量与选择策略
【10月更文挑战第23天】React与Vue:两大前端框架的较量与选择策略
|
1月前
|
JavaScript 前端开发 搜索推荐
Vue的数据驱动视图与其他前端框架的数据驱动方式有何不同?
总的来说,Vue 的数据驱动视图在诸多方面展现出独特的优势,其与其他前端框架的数据驱动方式的不同之处主要体现在绑定方式、性能表现、触发机制、组件化结合、灵活性、语法表达以及与后端数据交互等方面。这些差异使得 Vue 在前端开发领域具有独特的地位和价值。
|
2月前
|
JavaScript 前端开发 算法
前端优化之超大数组更新:深入分析Vue/React/Svelte的更新渲染策略
本文对比了 Vue、React 和 Svelte 在数组渲染方面的实现方式和优缺点,探讨了它们与直接操作 DOM 的差异及 Web Components 的实现方式。Vue 通过响应式系统自动管理数据变化,React 利用虚拟 DOM 和 `diffing` 算法优化更新,Svelte 通过编译时优化提升性能。文章还介绍了数组更新的优化策略,如使用 `key`、分片渲染、虚拟滚动等,帮助开发者在处理大型数组时提升性能。总结指出,选择合适的框架应根据项目复杂度和性能需求来决定。