nginx 跳转vue刷新报错_vue路由跳转常见报错

vue路由跳转错误:Error: Redirected when going from "/login" to "/index" via a navigation guard.

login.vue

login(formName) {
            let param = {
                account: this.ruleForm.account,
                password: this.ruleForm.password,
                captcha: this.ruleForm.captcha
            }
            this.$refs[formName].validate((valid) => {
                if (valid) {
                    api.login(param)
                    .then(res => {
                        if (res.code === 1) {
                            this.$message({
                                showClose: true,
                                message: res.message,
                                type: 'error'
                            });
                        } else {
                            this.$router.push({path: '/index'});
                            this.setToken(res.token);
                        }
                    })
                } else {
                    return false;
                }
            });

router.js

router.beforeEach((to,from,next) => {
    const token = cookie.get('Authorization');
    if(to.matched.some(res=>res.meta.isLogin)) {//判断是否需要登录
        if (token) {
            next();
        }else{
            next({
                path:"/login",
                query: {redirect: to.fullPath} 
            });
        }

    }else{
        next()
    }
    if(to.path == "/login"){
        if(token){
            next('/index');
        } else {
            next('/login');
        }
    }
});

出现错误:

8531258522db22f9b013f447d72c1f54.png

分析:当我们第一次点击登录时出现以上错误,点击第二次登录时正在进入主页

更具login.vue的代码可知,是先出发的路由跳转再存token;这样就导致,第一次登录时在路由守卫中无法拿到token;先进行了页面的跳转,因此因此守卫路由中断当前的导航(本次跳转),抛出异常,无法进入首页,第二次登陆能够登入首页是因为第一次登陆已经放好了token,因此正常拿到token也就能正常走这个函数了

解决办法:先设置token在进行路由跳转

login(formName) {
            let param = {
                account: this.ruleForm.account,
                password: this.ruleForm.password,
                captcha: this.ruleForm.captcha
            }
            this.$refs[formName].validate((valid) => {
                if (valid) {
                    api.login(param)
                    .then(res => {
                        if (res.code === 1) {
                            this.$message({
                                showClose: true,
                                message: res.message,
                                type: 'error'
                            });
                        } else {
                            this.setToken(res.token);
                            this.$router.push({path: '/index'});
                        }
                    })
                } else {
                    return false;
                }
            });
nginxvue中,当出现404跳转错误时,通常是由于路由配置问题导致的。根据引用内容和,可以看出解决问题的关键是正确配置nginxvue-router跳转设置。 首先,你需要进入nginx的配置文件夹,通常位于nginx安装目录下的conf文件夹。找到nginx.conf文件并进行修改。 根据引用内容,正确的nginx配置如下: ``` server { listen 80; server_name testwx.wangshibo.com; index index.php index.html index.htm default.php default.htm default.html; root /www/wwwroot/ssoShuang/dist; # vue-router配置 location / { try_files $uri $uri/ @router; index index.html; } location @router { rewrite ^.*$ /index.html last; } } ``` 这个配置中,index指令定义了默认的索引文件,root指令指定了根目录路径。而最关键的是在location块中,使用了try_files指令来尝试匹配URI,如果找不到对应的文件或目录,则会重定向到@router块,在这里将所有请求重定向到index.html。 这样配置后,当出现404跳转错误时,nginx会将请求重定向到vue-router,并通过index.html来处理该请求,从而解决了404错误。 总结起来,解决nginxvue跳转404错误的步骤如下: 1. 打开nginx的配置文件夹,找到nginx.conf文件进行修改。 2. 在server块中添加vue-router的配置,包括location块和@router块。 3. 在location块中使用try_files指令来尝试匹配URI,并重定向到@router块。 4. 在@router块中使用rewrite指令将请求重定向到index.html。 5. 保存配置文件,并重启nginx服务。 这样配置后,nginx会正确处理vue路由跳转,避免出现404错误。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值