本文为拉勾网大前端高薪训练营第一期笔记
心得体会
本章节花了很多时间看和学,主要是我对Vue.js和Nuxt.js并不是特别熟悉,之前写React.js比较多,这次真的是用一个非常实战的例子来学和实践,老师在视频里基本上只是把重点给做了,还有很多页面需要自己补全功能,经过这次作业有了一次全方位的理解,硕果累累,真的推荐学的人都自己实践一下。
实现的过程会遇到很多奇奇怪怪的问题,具体的问题和解决办法在本文最后,nuxtjs的报错真的不告诉是代码的哪一行真的很麻烦。
还有个意外收获就是因为这次作业是需要部署到gitee pages上,之前用过github pages,体验了一下gitee pages,还是挺简单易用,更新新代码也很快。
本文很长,作业代码在最后。
笔记
学习案例名称RealWorld
开源的学习项目,帮助开发者快速学习新技能
https://github.com/gothinkster/realworld
demo地址:http://demo.realworld.io/#/
接口文档:https://github.com/gothinkster/realworld/tree/master/api
页面模板:https://github.com/gothinkster/realworld-starter-kit/blob/master/FRONTEND_INSTRUCTIONS.md
创建项目
mkdir realworld-nuxtjs
cd realworld-nuxtjs
npm init -y
npm i nuxt
//配置启动脚本
//创建pages目录,配置初始页面
免费cdn服务
www.jsdelivr.com
有中国节点
ionicons在国内慢
google fonts在国内支持
封装请求
utils/request.js
import axios from 'axios'
const request = axios.create({
baseURL: 'https://conduit.productionready.io/'
})
export default request
登陆请求
//form阻止默认的提交行为
//<form @submit.prevent='onSubmit'>
import request from '@/utils/request'
export default {
methods: {
async onSubmit () {
try {
const { data } = await request({
method: 'POST',
url: '/api/users/login',
data: {
user: this.user
}
})
} catch (err) {
this.errors = err.response.data.errors
}
}
}
}
内存存储
store.js
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
export default () => { return new Vuex.Store({
state: {
user: null
},
mutations: {
setUser (state, user) {
state.user = user
}
},
actions: {}
})
}
登陆成功后
客户端onSubmit里
this.$store.commit(‘setUser’, data.user)
客户端存储到cookie
const Cookie = process.client ? require('js-cookie') : undefined
Cookie.set('user', data.user)
服务器端解析cookie
store/index.js
actions: {
nuxtServerInit ({ commit }, { req }) {
let user = null
if (req.headers.cookie) {
// 将请求头中的 Cookie 字符串解析为一个对象