Как получить клиентскую сторону, когда сервер может go два разных маршрута? - PullRequest
0 голосов
/ 27 апреля 2020

Я не уверен, как это сделать, но у меня есть сторона сервера почтовых запросов, которая переходит на два разных маршрута в зависимости от результата запроса.

app.post('/check', function(req, res) {
    connection.query("select exists (select * from visit WHERE id = ?) as 'res' ",
    id, function(err, result) {
      if (err) throw err;
      if(result[0].res == 0) {
        console.log("Doesn't exist in db.")
        res.redirect(307, '/post'); //goes to /post but after post it doesn't go to db
      }
  else {
    //if data exists update
    console.log("Exists in db.")
    res.redirect(307, '/up');  //goes to up but doesn't go to up.html afterwards
  }
}); 

Таким образом, запрос работает выше. Ниже он не меняет страницу веб-браузера.

app.post('/post', function(req, res) {
    //connects to mysql to update database
    res.redirect('/post.html'); //---when database updates the page doesn't change
});

Здесь также не работает:

app.post('/up', async function(req, res) {
  console.log("/qrupdate: post timeOut");
  let now = moment().format('MMMM Do YYYY, h:mm:ss a');
  data = req.body;
  let id = data.id.toString();
  connection.query("UPDATE visit SET timeOut = ? WHERE id=?", [now, id],
    function(err, result) {
      if (err) throw err;
    });
    res.redirect('/up.html');  //doesn't change page
});

Так почему же веб-страница не меняется, даже если она перенаправлены? Кроме того, если мне нужно выполнить выборку на стороне клиента, как должна выглядеть выборка? Я не знаю, идет ли он тем или иным путем, поэтому могу ли я это сделать; если это почтовый запрос, обновите страницу в указанном месте, иначе обновите страницу в этом месте? Я не знаю, что возможно или как это должно выглядеть.

fetch(api_url + '/qrcheck', {
  method: 'POST', // or 'PUT'
  headers: {
    'Content-Type': 'application/json'
  },
  body: qrdata
})
   .then((response) => response.json())
.then((data) => {
  console.log('Success:', data);
  //So here it prints the requests but I guess I wanted to do some kind of if statement
//like if post request was /post then window.location = post.html. Else window.location = up.html
    })
    .catch((error) => {
      console.error('Error:', error);
    });

1 Ответ

0 голосов
/ 28 апреля 2020

Так что я до сих пор не знаю, почему он не меняет страницу, если он публикует на / check и затем / up, он не go на up. html, но будет, если бы не сначала на go через / check (я предполагаю, что это как-то связано с перенаправлением дважды, если кто-то может дать дополнительную информацию о том, что это будет полезно, просто чтобы люди знали), но вы можете иметь утверждение if в своем получить с помощью data.

fetch(api_url + '/check', {
  method: 'POST', // or 'PUT'
  headers: {
    'Content-Type': 'application/json'
  },
  body: qrdata
})
.then((data) => {
  console.log('Success:', data);
    //I have added two if statements to check the location
    //then the client side is updated to that page
  if (data.url == url + '/up.html') {
    window.location.replace(url + '/up.html');
  }
  if (data.url == url + '/post.html') {
    window.location.replace(url + '/post.html');
  }
})
.catch((error) => {
  console.error('Error:', error);
});
...