帮朋友开发微信H5分享统计系统,也算是自己从头开始写的第一个Vue 项目,遇到不少坑,记录一下。
Vue-Router 的默认模式为 hash 模式,会在链接中加上一个 # ,非常难看,使用 history 模式后,则可以去除。
修改方式为在,/router/index.js
中 修改:
const router = new VueRouter({
mode: 'history', //指定模式为 history 模式
base: process.env.BASE_URL,
routes
})
在本地测试时一切正常,但是build 后发布到服务器,需要为 nginx 添加一条 localtion 记录。
location / {
root /usr/share/nginx/html/h5share;
index index.html index.htm;
try_files $uri $uri/ /index.html; #添加try_files 后正常
}
第一次开发,参考网上的教程,直接纯前端获取了微信的 access_token 实际上是不可取的 导致在发布上线后,立即出现了跨域的问题
code和 access_token 都应该由后端获取并缓存。
token要放在服务器就会解决跨域问题,同时补充下为什么要放到服务器生成:
直接在
startup.cs
中配置,注意在 MVC之前
在ConfigureServices 中注册 Cors
services.AddCors(options =>
options.AddPolicy("AllowRequest",
p => p.AllowAnyOrigin()) //允许所有跨域请求
);
在Configure 中使用 Cors
app.UseCors("AllowRequest");
let getAccessUrl = `http://leepush.azurewebsites.net/api/weixin/getAccessToken?code=${code}`
//loading
const loading = this.$loading()
let _that = this
axios
.get(getAccessUrl)
.then(response => {
console.info(response)
_that.userinfo = response.data
loading.close()
//add user to sys
let adduserUrl = `http://leepush.azurewebsites.net/api/weixin/AddUserToSys`
axios
.post(adduserUrl, {
"nickname": _that.userinfo.nickname,
"openid": _that.userinfo.openid,
"headimgurl": _that.userinfo.headimgurl
})
.then(re => {
console.info(re)
})
})
.catch(error => console.error(error))