回到顶部

Express项目中ajax请求session过期问题处理

时间:1年前   作者:请喊我大龙哥   浏览:439   [站内原创,转载请注明出处]

标签: Node.js   Express  

Express项目中ajax请求session过期问题处理

在页面中使用ajax方式异步请求返回自定义code信息是我们在开发中经常用到的,但是如果ajax请求后需要走拦截器判断用户登录身份是否失效呢?

正常的url请求我们可以在Express项目的app.user()中进行拦截,拦截成功后直接写url的重定向,但是ajax请求我们就不能这样写了。

如下:直接判断session,然后res.redirect即可。

app.use(function (req, res, next) {
    if (!req.session.user) {
        if (req.url == "/login") {
            next();
        }
        else {
            res.redirect('/login');
        }
    } else if (req.session.user) {
        res.locals.session = req.session;
        next();
    }
});

但是ajax请求就不行了,因为我们现在基本都是些type:json,那么现有的app.use就不能实现提示效果了,我们可以进行改造,增加ajax请求判断,我们都知道ajax请求的x-requested-with=XMLHttpRequest,所以就可以改造如下:

app.use(function (req, res, next) {
    if (!req.session.user) {
        //处理 ajax 请求 session 过期问题
        if (req.headers["x-requested-with"] != null
            && req.headers["x-requested-with"] == "XMLHttpRequest"
            && req.url != "/login") {
            return res.json({ret_code: 99, ret_msg: '登录信息失效,请您重新登录'});
        }
        if (req.url == "/login") {
            next();
        }
        else {
            res.redirect('/login');
        }
    } else if (req.session.user) {
        res.locals.session = req.session;
        next();
    }
});

增加判断后,ajax返回json状态码,在我们页面的ajax请求处理即可,那么问题又来了,需要每个页面的每个ajax方法去处理下?岂不是要疯了?当然不是,这就要用到$.ajaxSetup方法了,代码如下:

/**
 * Created by pangshunlong on 2017/3/31.
 */
/**
 * 设置未来(全局)的AJAX请求默认选项
 * 主要设置了AJAX请求遇到Session过期的情况
 */
$.ajaxSetup({
    complete: function (data) {
        if (data.responseJSON.ret_code && data.responseJSON.ret_code == 99) {
            layer.msg(data.responseJSON.ret_msg, {icon: 5});
            var top = getTopWinow();
            setTimeout('top.location.href = "/login";', 1500);
        }
    }
});

/**
 * 在页面中任何嵌套层次的窗口中获取顶层窗口
 * @return 当前页面的顶层窗口对象
 */
function getTopWinow() {
    var p = window;
    while (p != p.parent) {
        p = p.parent;
    }
    return p;
}

都引用下这个js文件即可实现所有页面的ajax在session失效后的提示和跳转登录页面啦~

如果谁有更好的方法请赐教~

请喊我大龙哥最后编辑于:1年前

内容均为作者独立观点,不代表八零IT人立场,如涉及侵权,请及时告知。

评论努力加载中...
暂无评论
暂无评论

手机扫码阅读

热门相关

加载中...
关于我们   联系我们   申请友链   赞助记录   站点地图
© 2014 - 2017 www.80iter.com All Rights Reserved. 京ICP备14042174号-1
本站遵循 CC BY 4.0 协议,转载请注明出处 。