nuxt+ts+vue简单后台项目,记录一些在做的过程中遇到的问题。(代码片段)

wgl0126 wgl0126     2023-04-11     279

关键词:

一、nuxt框架是一个前端框架,这个框架我的理解就是有利于seo,就是在被人百度的时候,会优先搜索到这个框架的网站。

二、主要问题:

1.登录

主要是在页面要先进行一些验证,数据请求的时候,必须携带正确的token才能请求数据,于是涉及到token的保存,需要通过接口获取到用户信息和token,再保存在store中,因为刷新页面,store就清空了,我就采用了localStorage保存信息。

首先是在page/login.vue获取用户信息和token

export default class AdminLogin extends Vue 
  private name: string = ‘admin‘
  private password: string = ‘admin‘

  // 登录
  private userLogin () 
    const data: object = 
      name: this.name,
      password: Md5.hashStr(this.password)
    ;
    this.$axios.post(‘/api/v1/login‘, data).then((res: any) => 
      if (res.success) 
        this.$store.commit(‘SET_TOKEN‘, res.data.token);
        this.$store.commit(‘SET_USERINFO‘,  name: res.data.name );
        window.localStorage.setItem(‘unserAllInfo‘, JSON.stringify(res.data));
        this.$router.push(‘/admin/‘); // 跳转
       else 
        this.$message.error( message: ‘登录失败,请输入正确的用户名和密码‘ );
      
    );
  

store/index.js

import Vuex from ‘vuex‘;

const store = () => new Vuex.Store(
  state: 
    userInfo: ,
    token: ‘‘
  ,
  mutations: 
    SET_TOKEN (state, data) 
      state.token = data || ‘‘;
    ,
    SET_USERINFO (state, data) 
      state.userInfo = data || ;
    
  ,
  actions: 
    // nuxtServerInit ( commit ,  req ) 
    //   const cookie = req.headers.cookie;
    // 
  ,
  getters: 
    token: (state) => 
      return state.token;
    ,
    getuserInfo: (state) => 
      return state.userInfo;
    
  
);

export default store;

在layout/admin.vue下面使用,防止刷新的时候store数据清空

private async created () 
      // 设置登录和token信息,防止刷新的时候store清空
      const userInfo = window.localStorage.getItem(‘unserAllInfo‘) || null;
      if (userInfo) 
        const data = JSON.parse(userInfo);
        this.$store.commit(‘SET_TOKEN‘, data.token);
        this.$store.commit(‘SET_USERINFO‘, data);
       else 
        this.$router.push(‘/admin/login‘);
      
    

使用$store.getters.getuserInfo.name 可获取信息

如果要退出登录,清空localStorage即可

// 退出登录
    // GoOut() 
    //   window.localStorage.setItem(‘wmMonitorUsers‘, ‘‘)
    //   this.$router.push(‘/admin/login‘)
    // 

在登录完成以后,我们每次发起数据请求的时候就需要带上token,于是在plugins下面对axios的请求进行了封装axios.js,需要在配置里面全局引用一下,在nuxt.config.js下加入以下代码

plugins: [
     src: ‘@/plugins/axios‘ ,
  ]

在plugins/axios.js写如下内容,都是抄的其他大神的。

export default function ( $axios, redirect, store ) 
  // http request 拦截器
  $axios.interceptors.request.use(
    (config) => 
      if (store.getters.token) 
        config.headers.Authorization = ‘Bearer ‘ + store.getters.token;
       else 
        config.headers.Authorization = ‘‘;
      
      return config;
    ,
    (err) => 
      return Promise.reject(err);
    );

  // http response 拦截器
  $axios.interceptors.response.use(
    (response) => 
      // 直接返回内容
      if (response.success) 
        return response.data;
      
      return response.data;
    ,
    (error) => 
      // store.commit(types.SET_LOAD, false);
      if (error.response) 
        const code = parseInt(error.response && error.response.status);
        switch (code) 
          case 401:
            sessionStorage.clear();
            redirect(‘/admin/login‘);
            console.log(401);
            break;
          case 403:
            sessionStorage.clear();
            redirect(‘/admin/login‘);
            console.log(403);
            break;
          case 404:
            sessionStorage.clear();
            console.log(404);
            break;
          case 500:
            // Message.error(‘Server exception‘);
            break;
          case 502:
            // Message.error(‘Bad Gateway‘);
            break;
          case 503:
            // Message.error(error.message);
            break;
          case 504:
            // Message.error(error.message);
            break;
          default:
            break;
        
      
      // console.error(error.config.url, error.response.status)
      return Promise.reject(error);
    );

接下来就是在页面,直接发起请求即可,为什么直接发起请求就可以了呢,因为我重新对axios进行了封装,在配置文件加载的时候就行了了这个操作,于是接下来在各个页面直接请求即可。

例如在page下面的vue文件中发起请求:

this.$axios.post(‘/api/v1/接口‘,  data: data ).then((res: any) => 
        if (res.success) 
          this.$message.success(‘保存成功!‘);
         else 
          this.$message.error( message: ‘保存失败!‘ );
        
      );

2.讲讲路由方面,我使用了<nuxt-link to="/admin/product"></nuxt-link>跳转,内容在<nuxt />中显示,跟vue的路由用起来一模一样。

nuxt的路由很方便,就是page下面的vue页面的名字,相当于他自动给你配置了路由,而你直接使用地址跳转就可以。layout里面放的是布局文件,就是你框架的整体结构,比如你从layout里面的index要跳转到page下面的product.vue,只需在to后面加上/product即可。

传参的路由,我要跳转到动态路由_id页面,我需要传参id过去,下面代码相当于admin/news/id,这个id是动态的,params是我传过去的id,跳转到的_id页面到时候路由显示就是admin/news/传过来的params里面的id

文件结构

技术图片

          <nuxt-link :to="name:‘admin-news-id‘, params:id: item._id"> item.title </nuxt-link>

动态路由_id页面里面获取id:this.$route.params.id,然后在根据id请求一些需要的数据

3.配置文件nuxt.config.js,我主要是配置了这些。env是配置一个全局的服务器地址,比如,我要渲染从服务器拿到的图片或其他资源,我的写法是src=process.env.serverUrl + 服务器存数据的地址,例如‘/public/img/a.img‘,这样就可以渲染出服务器上的图片了。

module.exports = 
proxy: 
    ‘/api‘: 
      target: ‘http://172.16.5.248:7001‘, // 目标接口域名
      changeOrigin: true, // 表示是否跨域
      pathRewrite: 
        ‘^/api‘: ‘‘ // 把 /api 替换成‘’
      
    
  ,
  /*
    ** Axios module configuration
    ** See https://axios.nuxtjs.org/options
    */
  axios: 
    // See https://github.com/nuxt-community/axios-module#options
    proxy: true, // 表示开启代理
    prefix: ‘/api‘, // 表示给请求url加个前缀 /api
    credentials: true // 表示跨域请求时是否需要使用凭证
  ,
  /*
    ** Build configuration
    */
  env: 
    serverUrl: ‘http://172.16.5.248:7001‘ // 自己的服务器地址配置
  ,

 

vue+ts+electron踩坑记录

...坑之旅。有了vue-cli脚手架在,搭建vue+TS的初始环境非常简单,运行后把语言选上typescript就行。初始化完成后,会生成一个模板项目,我们可以基于模板进行开发。这里要提一句,如果想把原来的项目升级成使用ts的,其实非常... 查看详情

在 Nuxt 项目中自定义 bootstrap-vue

】在Nuxt项目中自定义bootstrap-vue【英文标题】:Customizeboostrap-vueinaNuxtproject【发布时间】:2018-10-2514:33:08【问题描述】:我有一个nuxt项目,我在其中使用bootstrap-vue作为模块来设置组件样式。我对默认样式不满意,我想添加一些自... 查看详情

记录vue中踩的坑

...幸都解决了。其中有一个问题我想就此记录一下:vue中与后台请求数据,我采用的是axios插件,但是只能是在同域情况下进行请求。其中有这么一个接口,是由后台去对用户的登录状态去做的判断,然而我在本地去跑的时候,由... 查看详情

nuxt.js做站点地图(sitemap.xml)详解(代码片段)

前言在做跨境电商项目中seo是必须要做的,seo中站点地图(sitemap.xml,robots.txt)又是必不可少的,这里就记录一下nuxt中站点地图是如何做的。第一步:安装@/nuxt/sitemapnpminstall@nuxtjs/sitemap第二步:在根目录static目录下新建sit... 查看详情

vue3+typescript实战记录一

...果第三方类库并没有ts的.d.ts类型的声明文件,则无法在项目中正常使用。如果要顺利使用这些库,就需要我们添加声明文件。通过此地址可以查找当前安装的库有没有.d.ts的声明文件。项目中引入echarts在ts声明查找地址发现echart... 查看详情

nuxt.js做站点地图(sitemap.xml)详解(代码片段)

前言在做跨境电商项目中seo是必须要做的,seo中站点地图(sitemap.xml,robots.txt)又是必不可少的,这里就记录一下nuxt中站点地图是如何做的。第一步:在根目录static目录下新建sitemap.jssitemap.xml文件的内容importaxiosfrom"axios"... 查看详情

Vue/Nuxt.js 的 TS 错误:类型 '(() => any) 上不存在属性'纬度' | ComputedOptions<任何>'

】Vue/Nuxt.js的TS错误:类型\\\'(()=>any)上不存在属性\\\'纬度\\\'|ComputedOptions<任何>\\\'【英文标题】:TSerrorwithVue/Nuxt.js:Property\'latitude\'doesnotexistontype\'(()=>any)|ComputedOptions<any>\'Vue/Nuxt.js的TS错误:类型\'(()=&g 查看详情

记录一些好用的vue插件

...总的页面,数据从0到某个具体数字。  使用也很简单,npm安装之后,在要用到的页面引入,import CountTo from ‘vue-count-to‘<count-to class="card-panel-num" :startVal="0" :endVal="899" :duration="1000"></count-to... 查看详情

vue+nuxt项目页面刷新报错问题解决方式

参考技术A这是因为一些只兼容客户端的脚本被打包进了服务端的执行脚本中去。对于只适合在客户端运行的脚本,需要通过使用process.client变量来判断导入。举个例子,在你的.vue文件中: 查看详情

vue3+ts项目完结撒花(已部署)

Vue3+TS项目完结撒花Vue3+TS后台管理系统在线体验GitHub地址客官如果觉得还不戳,github上不妨顺手点个⭐️,鼓励一下吧。部分展示效果关于技术栈 查看详情

vue框架-学习记录

前段时间在做vue项目时,遇到挺多问题,想简单总结一下:1、关于父组件,子组件的通信网上有很多这方面的讲解,讲解也比较细致,我主要总结了自己在项目中需要的: 【1】父组件—子组件也就是“属性向下走”,即在父组... 查看详情

1.nuxt是什么?

百度了解下,简单说就是vue的seo化,因为vue是spa,不支持seo,从本地运行的源码可以看出来,html没有tkd和相关文字,导致百度收录困难,所以nuxt可以很好的解决这个问题,举个例子:纯vue的:  从mingyou.com的源码和网络... 查看详情

vue3+vite+ts+antdv搭建后台管理基础框架

参考技术A最近公司官网需要一个后台管理系统,一直在看vue3,但是都没有在实际项目中使用过,正好就借此机会来踩踩坑。点击这里查看源码Vite中文网(vitejs.cn)Vite需要Node.js版本>=12.0.0启动项目的第一感觉就是一个字快,还没... 查看详情

github清理,记录一些有趣的项目

1. rhino一种java做的开源javascript引擎https://github.com/mozilla/rhino  2. jeewx国人写的公众号管理后台,集成度有些高,不好剥离。还是weixin-sdk更好些,jar包导入,想用就用。https://github.com/zhangdaiscott/jeewx 3. Comp 查看详情

nuxt运行项目后中总是报错

 报错的内容:nuxt.config.js中的图片如果出现第一张图的中的错误:  请注释掉第二张图中extend里面的loader:‘eslit-loader’,或者把extend里面if下面的内容全部注释掉错误就会消失。出现错误的原因:  是用了es6,我们的代码... 查看详情

vue项目搭建过程

...作,所以想记录一下这个搭建过程构建vue运行环境这个很简单了,安装git,下载node,改npm源什么的查看npm源npmgetregistry修改npm源npmconfigsetregistryhttps://registry.npm.taobao.org使用vue-cli创建一个vue项目找个文件夹然后...n 查看详情

小5聊elementui-vue3-ts项目简单创建(代码片段)

vue2升级到vue3,不管任何框架,升级总有它改进的地方和原因,否则升级就毫无意义,技术变化日新月异,必须保持与时俱进,否则就很容易在技术的浪潮中被淘汰!vue3相比以前版本,最大一个变... 查看详情

关于vue的安装和一些简单属性

安装vue安装前初始化package.json主要用来描述自己的项目,记录安装过得文件有哪些,在当前文件夹下生产json安装vue--save(-S)代表项目依赖--save-dev(-D)代表开发依赖npminfovuenpminstallvue--savenpminstall//跑环境,将package中的依赖全部安装安装... 查看详情