106 votes

Comment rediriger l'URL du navigateur de l'utilisateur vers une autre page en Nodejs ?

Dans l'application que j'essaie d'écrire, la page principale ( http://localhost:8675 ) a la forme suivante :

<form action='/?joinnew' method='post'>
  <button>Start</button>
</form>

Voici le code dans server.js :

http.createServer(function(request, response) {
  var root = url.parse(request.url).pathname.split('/')[1];
  if (root == '') {
    var query = url.parse(request.url).search:
    if (query == '?joinnew') {
      var newRoom = getAvaliableRoomId(); // '8dn1u', 'idjh1', '8jm84', etc.
      // redirect the user's web browser to a new url
      // ??? How to do.  Need to redirect to 'http://whateverhostthiswillbe:8675/'+newRoom
...
}}}

J'aimerais bien qu'il y ait un moyen de le faire sans avoir à connaître l'adresse de l'hôte, car elle peut changer.

L'objet 'http' est un require('http') normal, PAS un require('express').

161voto

ebohlman Points 6938

Pour effectuer une redirection, vous envoyez un statut de redirection (301 pour une redirection permanente, 302 pour une redirection "ce site se trouve actuellement sur ...", et 307 pour une redirection temporaire intentionnelle) :

response.writeHead(301, {
  Location: `http://whateverhostthiswillbe:8675/${newRoom}`
}).end();

116voto

David Seholm Points 135

Pour ceux qui (contrairement à l'OP) utilisent l'option express lib :

http.get('*',function(req,res){  
    res.redirect('http://exmple.com'+req.url)
})

35voto

ChrisGciso Points 363

OP : "J'adorerais qu'il y ait un moyen de le faire sans avoir à connaître l'adresse de l'hôte..."

response.writeHead(301, {
  Location: "http" + (request.socket.encrypted ? "s" : "") + "://" + 
    request.headers.host + newRoom
});
response.end();

3voto

agravat.in Points 355

En Express, vous pouvez utiliser

res.redirect('http://example.com');

pour rediriger l'utilisateur depuis le serveur.

Pour inclure un code de statut 301 ou 302, on peut utiliser

res.redirect(301, 'http://example.com');

3voto

vintagexav Points 1868

Si vous utilisez Express la réponse complète la plus propre est la suivante

const express = require('express')
const app     = express()

app.get('*', (req, res) => {
  // REDIRECT goes here
  res.redirect('https://www.YOUR_URL.com/')
})

app.set('port', (process.env.PORT || 3000))
const server = app.listen(app.get('port'), () => {})

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X