2011-06-04 26 views
12

Estoy intentando redirigir la url de mi aplicación en Node.js de esta manera:nodejs: URL de redireccionamiento de

// response comes from the http server 
response.statusCode = 302; 
response.setHeader("Location", "/page"); 
response.end(); 

Pero la página actual se mezcla con la nueva, que tiene un aspecto extraño: | Mi solución parecía totalmente lógica, realmente no sé por qué sucede esto, pero si recargo la página después de la redirección, funciona.

De todos modos, ¿cuál es la forma correcta de hacer redirecciones HTTP en el nodo?

+0

¿Ha intentado enviar algo al organismo de respuesta? 'response.setHeader ('Content-Type', 'text/plain'); response.end ('

302. Redireccionando a xxx.com

'); ' –

Respuesta

8

Parece que el expreso lo tiene más o menos de la manera que usted tiene. Por lo que puedo ver, las diferencias son que empujan algunos contenidos corporales y usan una url absoluta.

Véase el método response.redirect expresa:

https://github.com/visionmedia/express/blob/master/lib/response.js#L335

// Support text/{plain,html} by default 
    if (req.accepts('html')) { 
    body = '<p>' + http.STATUS_CODES[status] + '. Redirecting to <a href="' + url + '">' + url + '</a></p>'; 
    this.header('Content-Type', 'text/html'); 
    } else { 
    body = http.STATUS_CODES[status] + '. Redirecting to ' + url; 
    this.header('Content-Type', 'text/plain'); 
    } 

    // Respond 
    this.statusCode = status; 
    this.header('Location', url); 
    this.end(body); 
}; 
1

¿Qué sucede si lo cambia a 307?

+0

Por supuesto, pero gracias, edito mi pregunta :) – Adam

+0

@CIRK Cambié mi respuesta entonces. – jcolebrand

2

Sí Debe ser la URL completa en setHeader.

res.statusCode = 302; 
    res.setHeader('Location', 'http://' + req.headers['host'] + ('/' !== req.url)? ('/' + req.url) : ''); 
    res.end(); 
0

Este problema también puede depender del tipo de solicitud que esté manejando. Una solicitud POST no se puede redirigir utilizando el encabezado. Por ejemplo, es probable que un visitante nuevo de su aplicación en FB venga a través de un POST de "solicitud firmada" y, por lo tanto, una redirección no funcionará.

1
server = http.createServer(
    function(req, res) 
    { 
     url ="http://www.google.com"; 
     body = "Goodbye cruel localhost"; 
     res.writeHead(301, { 
      'Location': url, 
      'Content-Length': body.length, 
      'Content-Type': 'text/plain' }); 

     res.end(body); 
    }); 
Cuestiones relacionadas