Express实现页面跳转

之前的思路是页面获取登录名和密码之后,利用Ajax请求传输数据,然后在路由处理里面利用SQL获取数据库数据,进行校验之后利用res.redirect()进行跳转,但是一直出错,出现了好几个问题,下面讲述问题和原因。

1.首先Ajax一般只是用来传输数据,不是用于进行页面跳转

因为Ajax使用之后他是一个完整的一个请求和回调的过程,在这个过程里面只存在一个HTTP表头,如果你重定向就会重复,就会报错。使用Ajax就是在同一个界面的东西,不能重定向到其他界面就打破Ajax的整个请求过程,因为redirect这个函数改变的是Ajax请求中间的定向,这就打破了Ajax整个流程。

所以如果你想做一个登陆界面,那么只有Ajax返回打开下一步的url,然后前端进行调转吧。或者不用Ajax。

2.报错Can’t set headers after they are sent.

例如我在路由处理时候这么写:

// 登陆信息验证
router.all('/test1',function (req,res,next) {
   

  //接收传输过来的邮箱和密码
  var username = req.query.username;
  var password = req.query.password;

  // username 和 password 都是string类型
  console.log('a '+typeof(username));
  console.log('b '+ password);

  // 连接数据库
  var connection = mysql.createConnection({      //创建mysql实例
      host:'127.0.0.1',
      port:'3306',
      user:'root',
      password:'',
      database:'test'
  });
  connection.connect();
  var sql = 'SELECT passwd FROM users where username = ' + username ;

  connection.query(sql, function (err,result) {
   

      var result1 = result[0].passwd;

      console.log('3'+result1) // 输出3123

      if(err){
          res.send(500);
          console.log('[SELECT ERROR]:',err.message);
      }

      else{

          if(password == result1){

              //登陆成功,进行页面的跳转
              console.log("登陆成功");
              res.send(200);
          }else{

              res.send(404);
              console.log("密码错误");
          };
      }
  });

  connection.end();

  return res.send(username);
});

就会报错:Can’t set headers after they are sent.,测试了下不能使用多个res.send(),但是按照网上

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值