如何将标头传递给get请求?

时间:2020-04-17 16:27:01

标签: javascript ajax express header get-request

我正在学习网络开发人员,我想在“ /”路由中发出获取请求时传递“授权”标头。

index.js:

app.get("/", function (req, res) {
  res.render("algoritmika", {logged: VefiryLogin(req)}); 
});

“ VerifyLogin”方法期望带有“授权”标头的请求,这显然没有传入。我使用Ajax进行发布请求,但是我不知道如何通过get请求传递标头。

如果我为“ /”路由编写自己的Ajax get请求并传递标题,则“ app.get”会触发两次,因此页面无法正确呈现。

编辑: Ajax代码:

    $.ajax({
        url: "/",
        type: "GET",
        headers: {"authorization": localStorage.getItem('token')},
        success: function() { ... }
     });

编辑2: 更多代码和我想做的事情(就像我说的那样,我是新手,所以我不知道这是否是正确的方法):

Validate.js-处理页面上的登录和注册表格。

$(document).ready(function () {
    $.ajax({
        url: "/",
        type: "GET",
        headers: {"authorization": localStorage.getItem('token')},
        success: function() { alert('Success!' + authHeader); }
     });

  $("#prijava").validate({
    rules: {
      email: {
        required: true,
        email: true,
      },
      password: {
        required: true,
      },
    },
    messages: {
      email: {
        required: "Vnesite email",
        email: "Vnesite pravilni email",
      },
      password: {
        required: "Vnesite geslo",
      },
    },
    submitHandler: function (form) {
      $.ajax({
        type: "POST",
        url: "/prijava",
        data: $(form).serialize(),
        success: function (token) {
          $(form).html("<div id='message'>Prijava uspela</div>");
          localStorage.setItem("token", token);
          setTimeout(function () {
            location.reload();
          }, 0001);
        },
        statusCode: {
          500: function (data) {
            console.log(data.responseJSON);
            if (!$("#message").length) {
              $(form).append(
                "<div class='text-center' id='message'>" +
                  data.responseJSON.error +
                  "</div>"
              );
            }
          },
        },
      });
      return false;
    },
  });
  $("#registration").validate({
    rules: {
      email: {
        required: true,
        email: true,
      },
      password: {
        required: true,
        minlength: 8,
      },
    },
    messages: {
      email: {
        required: "Vnesite email",
        email: "Vnesite pravilni email",
      },
      password: {
        required: "Vnesite geslo",
        minlength: "Vnesite vsaj 8 znakov",
      },
    },
    submitHandler: function (form) {
      console.log($(form).serialize());
      console.log(form);
      console.log(JSON.stringify($(form).serialize()));
      $.ajax({
        type: "POST",
        url: "/registracija",
        contentType: "application/x-www-form-urlencoded; charset=UTF-8",
        dataType: "json",
        data: $(form).serialize(),
        success: function (data) {
          $(form).html("<div >Registracija uspela!</div>");
          setTimeout(function () {
            location.reload();
          }, 0001);
        },
        statusCode: {
          500: function (data) {
            console.log(data.responseJSON);
            if (!$("#message2").length) {
              $(form).append(
                "<div class='text-center' id='message2'>" +
                  data.responseJSON.error +
                  "</div>"
              );
            }
          },
        },
      });
      return false;
    },
  });
});

start.js:如果用户未登录,这将阻止用户启动。

$(document).ready(function () {
    $("#startButton").on("click", function btnClick() {
      $.ajax({
        method: "GET",
        url: "/start",
        headers: {"authorization": localStorage.getItem('token')},
        success: function (data) {

          if(data == false){
            $("#modalPrijava").modal("show")
          }
          else if(data == true){
            window.location.href = "/bubblesort";  
          }


        },
        fail: function (err) {
           console.log(err)


        }
      });
    });
  });

index.js的更多内容-处理登录验证。

app.get("/start", function (req, res) {
    VefiryLogin(req,res);
});

function VefiryLogin(req,res = null){


  return jwt.verify(req.headers["authorization"], SECRET_PW, function (
    err,
    decoded
  ) {
    if (err) {
      console.log("error - not logged");
      console.log(err);
      SendIfNotNull(res,false);
      return false;
    } else {
      console.log("no error");
      console.log(decoded._id);
      user = userModel.findById(decoded._id);

      if (user) {
        SendIfNotNull(res,true);
        return true;

      } else {
        console.log("no user with this id");
        SendIfNotNull(res,false);
        return false;
      }
    }
  });
}

function SendIfNotNull(res,value){
  if(res != null){
    res.send(value);
  }
}

algoritmika.ejs-如果登录或不登录,则显示不同的内容


                            <% if(logged === false){ %>
                                ...
                            <% } else if(logged === true){ %>
                                ...
                            <% } %>  

0 个答案:

没有答案