W aplikacji, którą próbuję napisać, strona główna ( http: // localhost: 8675 ) ma postać:
<form action='/?joinnew' method='post'>
<button>Start</button>
</form>
Oto kod w 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
...
}}}
Bardzo chciałbym, gdyby istniał sposób na zrobienie tego, w którym nie musiałbym znać adresu hosta, ponieważ może się to zmienić.
Obiekt „http” jest zwykłym wymaganiem („http”), a NIE wymaganiem („express”).
Odpowiedzi:
response.writeHead(301, {Location: 'http://whateverhostthiswillbe:8675/'+newRoom} ); response.end();
źródło
response.writeHead(301, { Location: '/path' });
bez pełnego adresu URL, przydatne, gdy nie znasz wcześniej nazwy hosta lub protokołu.Dla tych, którzy (w przeciwieństwie do OP) używają Express lib:
http.get('*',function(req,res){ res.redirect('http://exmple.com'+req.url) })
źródło
OP: „Bardzo chciałbym, gdyby istniał sposób na zrobienie tego, w którym nie musiałbym znać adresu hosta…”
response.writeHead(301, { Location: "http" + (request.socket.encrypted ? "s" : "") + "://" + request.headers.host + newRoom }); response.end();
źródło
W Express możesz użyć
res.redirect('http://example.com');
przekierować użytkownika z serwera.
Aby dołączyć kod statusu 301 lub 302, można go użyć
res.redirect(301, 'http://example.com');
źródło
Jeśli używasz
Express
, najczystsza pełna odpowiedź brzmi: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'), () => {})
źródło
Możesz użyć metody res.render () lub res.redirect (), aby przekierować na inną stronę za pomocą node.js express
Na przykład:
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) });
Tutaj, w sekcji logowania, jeśli adres e-mail i hasło są zgodne w bazie danych, strona jest kierowana do dashbaord.html, w przeciwnym razie pokażemy page-error.html za pomocą metody res.redirect (). Możesz także użyć res.render () do renderowania strony w node.js
źródło