Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript res.redirect不是在任何地方重定向_Javascript_Node.js_Bcrypt - Fatal编程技术网

Javascript res.redirect不是在任何地方重定向

Javascript res.redirect不是在任何地方重定向,javascript,node.js,bcrypt,Javascript,Node.js,Bcrypt,像我的大多数问题一样,我看到了相似的问题,但它们不是相同的解决方案。我的res.redirect simple什么都不做。页面保持不变,绝对不会尝试重定向 我曾尝试将res.redirect放置在其他位置,但随后出现错误。我只想在登录后将页面重定向到另一个页面 app.post('/login', function (req, res) { var usernameCollection = mongoDBDatabase.collection('accounts'); var usern

像我的大多数问题一样,我看到了相似的问题,但它们不是相同的解决方案。我的res.redirect simple什么都不做。页面保持不变,绝对不会尝试重定向

我曾尝试将res.redirect放置在其他位置,但随后出现错误。我只想在登录后将页面重定向到另一个页面

app.post('/login', function (req, res) {
  var usernameCollection = mongoDBDatabase.collection('accounts');
  var username = req.body.username;
  var enteredPassword = req.body.password;

  usernameCollection.findOne({
    $or:[
          { username: username}
        ]
    }).then(function(user){
      if (user) {
        console.log('That username was found in the database');
        bcrypt.compare(enteredPassword, user.password.substr(1), function(err, result){
          if(result == true){
              console.log('Password matches!');
              console.log('logged in as ' + username);
              usercurrentlyloggedin = username;
              res.redirect('/username');
          }
          else{
            console.log('Password did not match');
             res.redirect('/');
          }
        });
      }
      else{
        console.log('The username ' + username + ' was NOT found in     the database');
      }
   });
});
服务器端代码:

function login(){
  console.log("login: " + usernameField.value, pwField.value);
  console.log('login button clicked');

  var postRequest = new XMLHttpRequest();
  var requestURL = '/login';
  postRequest.open('POST', requestURL);

  var requestBody = JSON.stringify({
    personId: usernameField.value,
    username: usernameField.value,
    password: pwField.value
  });

  postRequest.setRequestHeader('Content-Type', 'application/json');
  postRequest.send(requestBody);

  usernameField.value= "";
  pwField.value = "";

}

当您最终向您发送客户端代码时,让我们修复这两个方面:

想法是将json有效负载发送到服务器,从服务器获取json响应,并根据状态代码采取行动

因此,服务器端部分不返回重定向,而客户端则自行重定向

1) 服务器端

app.post('/login', async (req, res) => {
  try {
    const collection = mongoDBDatabase.collection('accounts');
    const {username, password} = req.body;

    const user = await collection.findOne({username});
    if (
      user &&
      await bcrypt.compare(password, user.password.substr(1))
    ) {
      res.status(200).send({});
      return;
    }

    res.status(403).send({message: 'Access denied'});
  }
  catch (error) {
    console.log(error);
    res.status(500).send({error: error.message});
  }
});
2) 客户端

function login(){
  console.log('login:',  usernameField.value, pwField.value);
  console.log('login button clicked');

  // request initialization
  var request = new XMLHttpRequest();
  request.setRequestHeader('Content-Type', 'application/json');
  request.responseType = 'json';
  request.open('POST', '/login');
  request.send(
    JSON.stringify({
      username: usernameField.value,
      password: pwField.value
    })
  );

  // request handling
  request.onload = function(e) {
    // success, redirecting user
    if (this.status == 200) {
      window.location.href = '/username';  
      return;
    }

    // got 403 from server, credentials are invalid
    if (this.status == 403) {
      alert('Username and/or password invalid.');
      return;
    }

    // system error raise
    if (this.status == 500) {
      alert('System error. Contact support.');
      return;
    }
  };
}

更改为
usernameCollection.findOne({username})
,确保终端中没有问题,也确保没有重定向到另一路由中的登录页面(如果用户未经身份验证)。@num8er谢谢,这确实缩短了我的代码,使它看起来更好了一点,仍然可以工作,但不幸的是仍然无法重定向。终端中的错误如何?@num8er,没有错误。它可以完美地找到用户名和密码,但不会重定向。你应该发布你的客户端代码。我的猜测是,您正在使用Ajax发送POST请求,您无法从中重定向。用一个简单的表单发送请求,或者在Ajax回调中处理重定向逻辑。刚刚用服务器端代码添加了我的编辑,但我将运行您发送给我的代码!只是运行了代码,但没有重定向。我在尝试后添加了一个console.log,它确实达到了这个程度。@Danjuro检查我的回答谢谢你的提问!我花了这么长时间编写服务器代码,完全忘记了浏览器的控制台。我用它来调整一些东西,使之与我的代码相匹配,我的朋友,它正式起作用了!你真是个天才@丹朱罗很乐意帮忙