En la aplicación que estoy intentando escribir, la página principal ( http: // localhost: 8675 ) tiene la siguiente forma:
<form action='/?joinnew' method='post'>
<button>Start</button>
</form>
Aquí está el código en 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
...
}}}
Me encantaría que hubiera una forma de hacerlo en la que no tuviera que saber la dirección del anfitrión, ya que eso podría estar cambiando.
El objeto 'http' es un requisito regular ('http'), NO un requisito ('express').
Respuestas:
response.writeHead(301, {Location: 'http://whateverhostthiswillbe:8675/'+newRoom} ); response.end();
fuente
response.writeHead(301, { Location: '/path' });
sin la URL completa, útil para cuando no conoce el nombre de host o el protocolo de antemano.Para aquellos que (a diferencia de OP) están usando express lib:
http.get('*',function(req,res){ res.redirect('http://exmple.com'+req.url) })
fuente
OP: "Me encantaría si hubiera una forma de hacerlo en la que no tuviera que saber la dirección del host ..."
response.writeHead(301, { Location: "http" + (request.socket.encrypted ? "s" : "") + "://" + request.headers.host + newRoom }); response.end();
fuente
En Express puedes usar
res.redirect('http://example.com');
para redirigir al usuario desde el servidor.
Para incluir un código de estado 301 o 302 se puede utilizar
res.redirect(301, 'http://example.com');
fuente
Si está usando
Express
, la respuesta completa más limpia es estaconst 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'), () => {})
fuente
Puede usar el método res.render () o res.redirect () para redirigir a otra página usando node.js express
P.ej:
var bodyParser = require('body-parser'); var express = require('express'); var navigator = require('web-midi-api'); var app = express(); app.use(express.static(__dirname + '/')); app.use(bodyParser.urlencoded({extend:true})); app.engine('html', require('ejs').renderFile); app.set('view engine', 'html'); app.set('views', __dirname); app.get('/', function(req, res){ res.render("index"); }); //This reponds a post request for the login page app.post('/login', function (req, res) { console.log("Got a POST request for the login"); var data = { "email": req.body.email, "password": req.body.password }; console.log(data); //Data insertion code var MongoClient = require('mongodb').MongoClient; var url = "mongodb://localhost:27017/"; MongoClient.connect(url, function(err, db) { if (err) throw err; var dbo = db.db("college"); var query = { email: data.email }; dbo.collection("user").find(query).toArray(function(err, result) { if (err) throw err; console.log(result); if(result[0].password == data.password) res.redirect('dashboard.html'); else res.redirect('login-error.html'); db.close(); }); }); }); // This responds a POST request for the add user app.post('/insert', function (req, res) { console.log("Got a POST request for the add user"); var data = { "first_name" : req.body.firstName, "second_name" : req.body.secondName, "organization" : req.body.organization, "email": req.body.email, "mobile" : req.body.mobile, }; console.log(data); **res.render('success.html',{email:data.email,password:data.password});** }); //make sure that Service Workers are supported. if (navigator.serviceWorker) { navigator.serviceWorker.register('service-worker.js', {scope: '/'}) .then(function (registration) { console.log(registration); }) .catch(function (e) { console.error(e); }) } else { console.log('Service Worker is not supported in this browser.'); } // TODO add service worker code here if ('serviceWorker' in navigator) { navigator.serviceWorker .register('service-worker.js') .then(function() { console.log('Service Worker Registered'); }); } var server = app.listen(63342, function () { var host = server.address().host; var port = server.address().port; console.log("Example app listening at http://localhost:%s", port) });
Aquí, en la sección de inicio de sesión, si el correo electrónico y la contraseña coinciden en la base de datos, entonces el sitio se dirige a dashbaord.html; de lo contrario, mostraremos page-error.html utilizando el método res.redirect (). También puede usar res.render () para representar una página en node.js
fuente