基于前端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
相关文章
|
JavaScript 前端开发 Java
制造业ERP源码,工厂ERP管理系统,前端框架:Vue,后端框架:SpringBoot
这是一套基于SpringBoot+Vue技术栈开发的ERP企业管理系统,采用Java语言与vscode工具。系统涵盖采购/销售、出入库、生产、品质管理等功能,整合客户与供应商数据,支持在线协同和业务全流程管控。同时提供主数据管理、权限控制、工作流审批、报表自定义及打印、在线报表开发和自定义表单功能,助力企业实现高效自动化管理,并通过UniAPP实现移动端支持,满足多场景应用需求。
1279 1
|
移动开发 前端开发 JavaScript
Vue与React两大前端框架的主要差异点
以上就是Vue和React的主要差异点,希望对你有所帮助。在选择使用哪一个框架时,需要根据项目的具体需求和团队的技术栈来决定。
770 83
|
JSON 自然语言处理 前端开发
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
787 72
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
|
前端开发 Java 物联网
智慧班牌源码,采用Java + Spring Boot后端框架,搭配Vue2前端技术,支持SaaS云部署
智慧班牌系统是一款基于信息化与物联网技术的校园管理工具,集成电子屏显示、人脸识别及数据交互功能,实现班级信息展示、智能考勤与家校互通。系统采用Java + Spring Boot后端框架,搭配Vue2前端技术,支持SaaS云部署与私有化定制。核心功能涵盖信息发布、考勤管理、教务处理及数据分析,助力校园文化建设与教学优化。其综合性和可扩展性有效打破数据孤岛,提升交互体验并降低管理成本,适用于日常教学、考试管理和应急场景,为智慧校园建设提供全面解决方案。
769 70
|
JavaScript 前端开发 API
|
JavaScript 前端开发 编译器
Vue与TypeScript:如何实现更强大的前端开发
Vue.js 以其简洁的语法和灵活的架构在前端开发中广受欢迎,而 TypeScript 作为一种静态类型语言,为 JavaScript 提供了强大的类型系统和编译时检查。将 Vue.js 与 TypeScript 结合使用,不仅可以提升代码的可维护性和可扩展性,还能减少运行时错误,提高开发效率。本文将介绍如何在 Vue.js 项目中使用 TypeScript,并通过一些代码示例展示其强大功能。
539 22
|
JavaScript API 开发者
Vue框架中常见指令的应用概述。
通过以上的详细解析,你应该已经初窥Vue.js的指令的威力了。它们是Vue声明式编程模型的核心之一,无论是构建简单的静态网站还是复杂的单页面应用,你都会经常用到。记住,尽管Vue提供了大量预定义的指令,你还可以创建自定义指令以满足特定的需求。为你的Vue应用程序加上这些功能增强器,让编码变得更轻松、更愉快吧!
236 1
|
人工智能 自然语言处理 JavaScript
用 CodeBuddy 搭建Vue框架 像呼吸一样简单
本文介绍如何借助 CodeBuddy 快速创建 Vue 项目。CodeBuddy 是一款支持自然语言编程的工具,能根据用户需求自动生成代码,降低开发门槛。文章详细说明了通过 CodeBuddy 创建 Vue 项目的步骤,包括解决项目创建失败的问题、自动补全代码功能以及启动开发服务器的方法。无论开发者经验如何,CodeBuddy 都能显著提升效率,让开发更专注创意实现。
|
安全 前端开发 开发工具
【01】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-项目开发实战-优雅草卓伊凡拟开发一个一站式家政服务平台-前期筹备-暂定取名斑马家政软件系统-本项目前端开源-服务端采用优雅草蜻蜓Z系统-搭配ruoyi框架admin后台-全过程实战项目分享-从零开发到上线
【01】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-项目开发实战-优雅草卓伊凡拟开发一个一站式家政服务平台-前期筹备-暂定取名斑马家政软件系统-本项目前端开源-服务端采用优雅草蜻蜓Z系统-搭配ruoyi框架admin后台-全过程实战项目分享-从零开发到上线
875 5
【01】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-项目开发实战-优雅草卓伊凡拟开发一个一站式家政服务平台-前期筹备-暂定取名斑马家政软件系统-本项目前端开源-服务端采用优雅草蜻蜓Z系统-搭配ruoyi框架admin后台-全过程实战项目分享-从零开发到上线
|
人工智能 JavaScript 前端开发
Vue 性能革命:揭秘前端优化的终极技巧;Vue优化技巧,解决Vue项目卡顿问题
Vue在处理少量数据和有限dom的情况下技术已经非常成熟了,但现在随着AI时代的到来,海量数据场景会越来越多,Vue优化技巧也是必备技能。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~