사용자의 브라우저 URL을 Nodejs의 다른 페이지로 리디렉션하는 방법은 무엇입니까?


84

작성하려는 응용 프로그램에서 기본 페이지 ( http : // localhost : 8675 )의 형식은 다음과 같습니다.

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

다음은 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
...
}}}

변경 될 수 있으므로 호스트 주소를 알 필요가없는 곳에서 할 수있는 방법이 있다면 좋겠습니다.

'http'개체는 일반 require ( 'http')이며 require ( 'express')가 아닙니다.


1
"NOT express .."감사합니다. Node.js가 실제로 Express.js가되는 방식을 슬프게도합니다.
marko-36

답변:


139
response.writeHead(301,
  {Location: 'http://whateverhostthiswillbe:8675/'+newRoom}
);
response.end();

10
노드에서는 response.writeHead(301, { Location: '/path' });전체 URL 없이도 사용할 수 있으며 호스트 이름이나 프로토콜을 미리 알지 못하는 경우에 유용합니다.
adriaan

1
크롬이 리디렉션을 눈에 띄게 캐시하지 않도록하려면 코드 307을 사용하십시오! 위에 나열된 경우 301을 반환하면 서버가 다른 / 새 방을 알려줄 때에도 브라우저가 항상 동일한 방에 참여하게됩니다!
Brian Ellis

93

OP와는 달리 Express lib를 사용하는 사람들을 위해 :

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


2
'익스프레스'패키지 없이도 가능합니까?
Tanaki

감사. 이것은 내가 필요한 것입니다
리자

2
질문에 대답하지 않습니다
앨릭스 존스

1
@AlexJone 추가로 유용한 정보를 제공합니다. SO에 대한 응답이 항상 독립형으로 간주되는 것은 아닙니다.
Paul Stelian

34

OP : "호스트 주소를 몰라도 할 수있는 방법이 있다면 좋겠습니다 ..."

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

3

Express에서는 다음을 사용할 수 있습니다.

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

서버에서 사용자를 리디렉션합니다.

상태 코드 301 또는 302를 포함하려면 다음을 사용할 수 있습니다.

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

1

을 사용하는 경우 Express가장 깨끗한 완전한 대답은 다음과 같습니다.

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'), () => {})

0

res.render () 또는 res.redirect () 메서드를 사용하여 node.js express를 사용하여 다른 페이지로 리디렉션 할 수 있습니다.

예 :

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)
});

여기 로그인 섹션에서 이메일과 비밀번호가 데이터베이스에서 일치하면 사이트가 dashbaord.html로 이동합니다. 그렇지 않으면 res.redirect () 메소드를 사용하여 page-error.html이 표시됩니다. 또한 res.render ()를 사용하여 node.js에서 페이지를 렌더링 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.