1.前后端分离产生的跨域问题:
解决方法一:
在webpack(config/index.js)的修改为:
1 | proxyTable: { |
相应的globalOptions的baseUrl也设置为:1
baseURL: '/api',
整个设置意思为:每次遇到/api的访问请求时,就会在proxyTable中自动代理到target的值中(也就是示例中的http://192.168.212.23:9898),并且在发起请求中根据pathRewrite的设置,修改请求路径(示例中是将所有的/api替换为/,也就是直接请求后台,避免后台要给每个接口添加/api字段)
解决方法二:
使用koa2-cors中间件:
1 | var koa = require('koa'); |
*注意:如果前端用的axios,并且headers设置的代码如下(这时浏览器会先以options的方式请求后台,成功才会继续使用get,post请求接口,如果后台不增加设置allowMethods和allowHeaders字段,options这一步就会产生跨域问题,导致后续无法请求成功):**1
2
3
4
5
6
7
8const globalOptions = {
withCredentials: true,
baseURL: 'http://192.168.212.23:9898',
timeout: 60000,
headers: {
'axios-header': 'axios'
}
};
那么后台应该对应的添加字段,代码如下:1
2
3
4
5{
......
allowMethods: ['GET', 'POST', 'DELETE', 'OPTIONS'],
allowHeaders: ['Content-Type', 'Authorization', 'Accept', 'axios-header']
}
再具体的相关解释参考node.js应答跨域请求实现(以koa2-cors为例)
解决方法三:
其他方法参考前端跨域问题
2.请求到后304
在请求上添加事件戳(plugins/index.js)
1 | import axios from 'axios' |
3.对于未登录与登录后看到页面显示不同的问题
用vuex控制,store存储一个loginStatus的变量,默认false,点击登录则为true,点击登出变为false
4.对于路由跳转问题
登录之后不能在进入登录页,未登录不能发表文章,删除文章等功能的控制,可以用router.beforeEach来判断_id是否存在,这个_id是每次登录成功后后台返回的用户的id,每次登出时候将其清除1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16router.beforeEach((to, from, next) => {
// 如果localStorage没有_id则表示未登录,强制跳转到登录页
if (!localStorage.getItem('_id')) {
if (to.path !== '/signUp' && to.path !== '/signIn') {
next('/signIn')
} else {
next()
}
} else {
if (to.path === '/signIn') {
next('/')
} else {
next()
}
}
})
5.关于session
在每次登录请求时候,后台返回过期时间,前台根据这个时间来设置localstorage的过期时间(localstorage本身不会失效,没有过期时间,因此需要手动设置),返回的过期时间需要和config中设置的maxAge的session过期时间一致