首页 > nodejs 写登录页面 请求的执行顺序问题

nodejs 写登录页面 请求的执行顺序问题

问题是:想点击登录根据返回的status信息实现跳转,但是返回的是个空的status。
直接上代码
前台请求的代码

<script>
window.onload = function() {
$("#login").click(function(){
           var username = $("#username").val();
           var password = $("#password").val();
           var data = {"username":username,"password":password};
                $.ajax({ 
                            url:'login',
                            type:'post',
                            data: data,
                            success: function(data,status){ 
                                if(status == 'success'){ 
                                    location.href = 'manage_menu';
                                }
                            },
                            error: function(data,status){ 
                                if(status == 'error'){ 
                                    alert("用户名或密码错误!请重新输入。")
                                    location.href = 'login';
                                }
                            }
                        });
})
}
</script>

这个是路由里面的响应代码

router.post('/login',function(req,res){
    return  dao.User(req.body.username)
     .then(function (error,result) {       
        var  user={
            username:result[0].username,
            password:result[0].password
        }
         console.log(user);      
         if(req.body.username==user.username&&req.body.password==user.password){
           
            req.session.user = user;
            res.sendStatus(200);            
            }
        else{
             
             req.session.error = "用户名或密码不正确";
             res.sendStatus(404);             
              }
       });

数据库查询的代码

  function User(username,callback) {
                return db.msql.query('select * from User where username="'+username+'"')
                .then(function (data) {
                    console.log(data);
                return callback(null,data);                    
                 });
    }

运行日志信息如下

 express:router use / query +0ms
  express:router use / expressInit +0ms
  express:router use / logger +0ms
  express:router use / jsonParser +41ms
  express:router use / urlencodedParser +5ms
  express:router use / cookieParser +1ms
  express:router use / session +1ms
  express:router use / serveStatic +3ms
  express:router use / <anonymous> +6ms
  express:router use / router +1ms
  express:router use /users router +3ms
  express:router use / <anonymous> +3ms
  express:router use / <anonymous> +1ms
  express:router use / <anonymous> +2ms
  express:router dispatching POST /users/login +2s
  express:router query  : /users/login +5ms
  express:router expressInit  : /users/login +11ms
  express:router logger  : /users/login +3ms
  express:router jsonParser  : /users/login +8ms
  express:router urlencodedParser  : /users/login +9ms
  express:router cookieParser  : /users/login +52ms
  express:router session  : /users/login +3ms
  express:router serveStatic  : /users/login +6ms
  express:router <anonymous>  : /users/login +1ms
  express:router router  : /users/login +1ms
  express:router dispatching POST /users/login +1ms
  express:router trim prefix (/users) from url /users/login +3ms
  express:router router /users : /users/login +20ms
  express:router dispatching POST /login +4ms
  express:router dispatching GET /users/login? +9ms
  express:router query  : /users/login? +1ms
  express:router expressInit  : /users/login? +2ms
  express:router logger  : /users/login? +5ms
  express:router jsonParser  : /users/login? +6ms
  express:router urlencodedParser  : /users/login? +4ms
  express:router cookieParser  : /users/login? +2ms
  express:router session  : /users/login? +10ms
  express:router serveStatic  : /users/login? +4ms
  express:router <anonymous>  : /users/login? +18ms
  express:router router  : /users/login? +2ms
  express:router dispatching GET /users/login? +4ms
  express:router trim prefix (/users) from url /users/login? +3ms
  express:router router /users : /users/login? +3ms
  express:router dispatching GET /login? +1ms
GET /users/login? 304 99.863 ms - -
POST /users/login - - ms - -
  express:router dispatching GET /stylesheets/manage_style.css +79ms
  express:router query  : /stylesheets/manage_style.css +7ms
  express:router expressInit  : /stylesheets/manage_style.css +15ms
  express:router logger  : /stylesheets/manage_style.css +8ms
  express:router jsonParser  : /stylesheets/manage_style.css +5ms
  express:router urlencodedParser  : /stylesheets/manage_style.css +3ms
  express:router cookieParser  : /stylesheets/manage_style.css +1ms
  express:router session  : /stylesheets/manage_style.css +1ms
  express:router serveStatic  : /stylesheets/manage_style.css +6ms
GET /stylesheets/manage_style.css 304 38.838 ms - -
[ RowDataPacket { username: 'admin', password: 'admin' } ]

从日志里看是POST请求先响应了一个空的status,所以导致登录跳转不了,请大神帮忙看下是哪里写的不对,谢谢!


找到原因了。。是前台ajax请求的问题,ajax是异步执行的,没等查询数据库操作完成就返回了空值。
将ajax的async设置成false后执行顺序就对了,但是location.href=url不好用了。。。
解决方法是在回调函数后面加上return=false;
但是不知道原理是什么。。。

【热门文章】
【热门文章】