नोड्सज - रीडायरेक्ट यूआरएल


118

किसी अमान्य url में प्रवेश करने पर मुझे उपयोगकर्ताओं को 404.html पृष्ठ पर पुनर्निर्देशित करने के लिए एक नोड.जेएस सर्वर कैसे मिलता है?

मैंने कुछ खोज की, और ऐसा लगता है कि अधिकांश परिणाम एक्सप्रेस के लिए हैं, लेकिन मैं अपने सर्वर को शुद्ध नोड में लिखना चाहता हूं।


1
मैं मानता था कि मेरा ऐप शुद्ध नोड में बेहतर था ।js, लेकिन एक्सप्रेस स्थापित करने के बाद बहुत खुश थे। मैं अब व्यक्त किए बिना एक नोड एसपीए / रेस्टफुल वेब सेवा वास्तुकला की कल्पना नहीं कर सकता।
ग्राहम

जवाबों:


193

"गलत" यूआरएल को निर्धारित करने का तर्क आपके आवेदन के लिए विशिष्ट है। यदि आप एक RESTful ऐप कर रहे हैं तो यह एक साधारण फ़ाइल नहीं मिली या कुछ और त्रुटि हो सकती है। एक बार आपने यह पता लगा लिया कि रीडायरेक्ट भेजना उतना ही सरल है:

response.writeHead(302, {
  'Location': 'your/404/path.html'
  //add other headers here...
});
response.end();

यह मेरा 404 html पेज नहीं दिखाता है, हो सकता है कि यह सिर्फ हेडर दिखाए।
डिझुंग गुयेन

7
@ दुखद सच नहीं। कोशिश करो Location: /और यह आपको रूट फ़ोल्डर में रीडायरेक्ट करेगा।
user3459110

असवाल से सहमत। मैं उपयोग कर रहा हूँ'Location': '/path/to/my/servers/content'
मिल्ली स्मिथ

73

इसका उपयोग करना संभव है:

res.redirect('your/404/path.html');

73
केवल व्यक्त में। देशी नोड.जेएस ऐप में नहीं।
सर्गेई यारट्सकी

@TarunG टिप्पणी के लिए धन्यवाद, यदि आप उस प्रश्न के संपादित इतिहास को देखते हैं जो आप देखते हैं कि यह हमेशा इतना स्पष्ट नहीं था।
डानिएल डब्ल्यू। क्रॉम्पटन

2
मेरे मामले में res.redirect ('/ login') केवल ajax कॉल के जवाब में login.html सामग्री भेजता है। मैं पेज को कैसे खोलूं?
तरुण

पुरानी पोस्ट, लेकिन शायद आप res.direct (' लोकलहोस्ट: 5000 / लॉगिन' ) जैसी किसी चीज़ की तलाश कर रहे हैं , खासकर यदि आप अपने एक्सप्रेस सर्वर को अपने फ्रंटएंड से अलग पोर्ट पर चला रहे हैं जैसे कि मैं होता हूं।
jboxxx

18

अनुपलब्ध फ़ाइल / संसाधन को इंगित करने और 404 पृष्ठ की सेवा करने के लिए, आपको अनुप्रेषित करने की आवश्यकता नहीं है। उसी अनुरोध में आपको 404 एचटीएमएल पेज की स्थिति कोड और प्रतिक्रिया निकाय के रूप में आपके 404 एचटीएमएल पेज की सामग्री के साथ प्रतिक्रिया उत्पन्न करनी चाहिए। यह Node.js. में प्रदर्शित करने के लिए नमूना कोड है

var http = require('http'),
    fs = require('fs'),
    util = require('util'),
    url = require('url');

var server = http.createServer(function(req, res) {
    if(url.parse(req.url).pathname == '/') {
        res.writeHead(200, {'content-type': 'text/html'});
        var rs = fs.createReadStream('index.html');
        util.pump(rs, res);
    } else {
        res.writeHead(404, {'content-type': 'text/html'});
        var rs = fs.createReadStream('404.html');
        util.pump(rs, res);
    }
});

server.listen(8080);

10

कंटेंट / बॉडी के साथ 404

res.writeHead(404, {'Content-Type': 'text/plain'});                    // <- redirect
res.write("Looked everywhere, but couldn't find that page at all!\n"); // <- content!
res.end();                                                             // that's all!

Http s पर पुनर्निर्देशित

res.writeHead(302, {'Location': 'https://example.com' + req.url});
res.end();

बस इस पर विचार करें कि आप इसका उपयोग कहां करते हैं (उदाहरण के लिए केवल http अनुरोध), ताकि आपको अंतहीन रीडायरेक्ट न मिले;;


7

मैंने 404 के रूप में डिफ़ॉल्ट के साथ एक स्विच स्टेटमेंट का उपयोग किया:

var fs = require("fs");
var http = require("http");

function send404Response (response){
    response.writeHead(404, {"Content-Type": "text/html"});
    fs.createReadStream("./path/to/404.html").pipe(response);
}

function onRequest (request, response){
    switch (request.url){
        case "/page1":
            //statements
            break;
        case "/page2":
            //statements
            break;
        default:
        //if no 'match' is found
            send404Response(response);
            break;
    }
}

http.createServer(onRequest).listen(8080);

5

इसे इस्तेमाल करे:

this.statusCode = 302;
this.setHeader('Location', '/url/to/redirect');
this.end();

1
यह शायद एक Expressकोड स्निपेट है जिसे ओपी ने शुद्ध node.jsकोड के लिए कहा
रेफेल एकरमैन

यह एक्सप्रेस कोड नहीं है। यह thisभाग को छोड़कर वेनिला नोड कोड जैसा दिखता है । NodeJS में आप एक हैंडलर लिखते हैं जो दो मापदंडों को स्वीकार करता है (request, response)और उत्तर में उन सभी कॉल responseऑब्जेक्ट पर हैं।
20

1

आपको निम्नलिखित कोड का उपयोग करना होगा:

response.writeHead(302 , {
           'Location' : '/view/index.html' // This is your url which you want
        });
response.end();

0

निम्न कोड का उपयोग करें यह मूल निवासी नोड्स में ठीक काम करता है

http.createServer(function (req, res) {
var q = url.parse(req.url, true);
if (q.pathname === '/') {
  //Home page code
} else if (q.pathname === '/redirect-to-google') {
  res.writeHead(301, { "Location": "http://google.com/" });
  return res.end();
} else if (q.pathname === '/redirect-to-interal-page') {
  res.writeHead(301, { "Location": "/path/within/site" });
  return res.end();
} else {
    //404 page code
}
res.end();
}).listen(8080);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.