Nodejs में उपयोगकर्ता के ब्राउज़र URL को किसी भिन्न पृष्ठ पर पुनर्निर्देशित कैसे करें?


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' ऑब्जेक्ट एक नियमित आवश्यकता है ('http'), आवश्यकता नहीं है ('एक्सप्रेस')।


1
"नहीं व्यक्त .." के लिए धन्यवाद। Kinda उदास है कि कैसे Node.js व्यावहारिक रूप से "Express.js" बन रहा है।
मार्को -36

जवाबों:


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

10
नोड में आप response.writeHead(301, { Location: '/path' });पूर्ण URL के बिना भी उपयोग कर सकते हैं , जब आप पहले से होस्टनाम या प्रोटोकॉल नहीं जानते हैं।
एड्रियन

1
कोड 307 का उपयोग करें यदि आप क्रोम को पुनर्निर्देशन को रोकना नहीं चाहते हैं! ऊपर सूचीबद्ध मामले में, 301 वापस आने से ब्राउज़र उसी कमरे में शामिल हो जाएगा, तब भी जब आपका सर्वर इसे अलग / नया कमरा बताएगा!
ब्रायन एलिस

93

उन लोगों के लिए जो (ओपी के विपरीत) एक्सप्रेस का उपयोग कर रहे हैं :

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

12
उचित क्रेडिट के लिए ... stackoverflow.com/questions/7450940/…
डेविड सेहोल्ड

2
क्या to एक्सप्रेस ’पैकेज के बिना ऐसा करना संभव है?
तनाकी

धन्यवाद। यह वही है
जिसकी

2
इस सवाल का जवाब नहीं
एलेक्स जौन

1
@AlexJone यह एक अतिरिक्त उपयोगी जानकारी प्रदान करता है। SO पर प्रतिक्रियाओं को हमेशा स्टैंडअलोन नहीं माना जाना चाहिए।
पॉल स्टेलियन

34

ओपी: "मुझे अच्छा लगेगा अगर ऐसा करने का कोई तरीका है जहां मुझे होस्ट का पता नहीं होना चाहिए ..."

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

3

एक्सप्रेस में आप उपयोग कर सकते हैं

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 () विधि का उपयोग कर सकते हैं

जैसे:

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

यहां लॉगिन अनुभाग में, यदि ईमेल और पासवर्ड डेटाबेस में मेल खाते हैं, तो साइट को डैशबॉर्ड.html पर निर्देशित किया जाता है अन्यथा हम res.redirect () विधि का उपयोग करके पृष्ठ-एरर.html दिखा देंगे। इसके अलावा आप एक पृष्ठ को नोड में प्रस्तुत करने के लिए res.render () का उपयोग कर सकते हैं। js

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.