nuxt项目构建

673 阅读1分钟

看到nuxt可以解决seo的问题,根据www.nuxtjs.cn/guide/insta… 官网地址开搞。 我安装的nuxt版本是2.15.7 按照官网的步骤一顿操作后,我们会得到以下目录结构(除红色框框以外)

image.png

相关目录的接口信息我这里就不在赘述,官网讲的很详细

通信采用axios 安装@nuxt/axios模块: npm install @nuxtjs/axios -S
配置:nuxt.confifig.js

modules: [

'@nuxtjs/axios',

],

axios: {

proxy: true

},

proxy: {

"/api": "http://localhost:8080"

}, 接下来自己可以对axios进行一些封装,可以在plugins目录下创建一个axios.js,然后再nuxt.confifig.js进行注册plugins: ["@/plugins/axios"]这样就可以全局引用了 如果想在axios里面操作store或route等内容的话,可以通过以下方式

image.png

大家如果在nuxt.confifig.js中注册设置了components: true,会发现组件会自动导入,感觉很nice

asyncData ⽅法使得我们可以在设置组件数据之前异步获取或处理数据。

index.vue

export default {

async asyncData({ $axios, error }) {

const {ok, goods} = await $axios.$get("/api/goods");

if (ok) {

return { goods };

}

// 错误处理

error({ statusCode: 400, message: "数据查询失败" });

},

} 配置404页面,在layout文件夹新建一个error.vue文件

image.png 试着在页面输入一个错的路由,页面会自动跳转到这个error页面。

如果需要使用cookie的话,npm i -S cookie-universal-nuxt。在store/index.js,注意 在nuxt.confifig.js配置modules:['cookie-universal-nuxt'] 然后再组件中就可以this.$cookies来使用cookies了

nuxtServerInit

通过在store的根模块中定义 nuxtServerInit ⽅法,将服务端的⼀些数据传到客户端。前提是已经安装了cookie-universal-nuxt。在store/index.js,注意nuxtServerInit只在store/index.js文件才生效 export const actions = {

    nuxtServerInit({ commit }, { app }) {
     //获取服务端的信息   
    const token = app.$cookies.get("token");

    if (token) {

    console.log("nuxtServerInit: token:"+token);
    //这里操作store进行存储
    commit("user/SET_TOKEN", token);

    }

}

};

可以注册一个中间件来管理权鉴 在middleware下新建一个文件,比如auth.js,然后再nuxt.confifig.js中注册

router: {

middleware: 'auth'

},

如果想根据不同的环境来配置服务,那么可以通过安装cross-env来进行 首先npm i -S cross-env安装 然后在nuxt.config.js导出

image.png

image.png 新建一个env.js,来管理

image.png 新建一个store文件来保存,然后再axios中就可以使用了 store.state.envpath.url.BASE_API

image.png

需要注意,在nuxt中store的state必须是个函数

export const state=()=>({ name:'',age:'' })

如果需要在nuxt中使用localStorage,需要安装nuxt-vuex-localstorage 在nuxt.config.js上需要配置 modules: ['nuxt-vuex-localstorage', { mode: 'debug',//这样是调试状态存储在页面中看到的是不会加密的 // localStorage: ['localStorage', 'foo']//不配置的话 就是默认的localStorage跟, //sessionStorage:['sessionStorage']//不配置的话 就是默认的sessionStorage.js, }] ] 如果localStorage跟sessionStorage不配置文件的话 就会是默认store文件夹下的localStorage.js跟sessionStorage.js,当然这两个js文件 是需要自己去store文件夹去新建的。比如

image.png 在其他文件运用this.$store.commit('localStorage/setLogInfo',{loginName:'qqq',password:'1234'})就可以操作了 好了,经过上述的操作,咱们就可以按照自己的项目需求去构建啦。