নোডেজ - ইউআরএল পুনর্নির্দেশ করুন


118

ব্যবহারকারীরা যখন কোনও অবৈধ ইউআরএল প্রবেশ করেন তখন আমি 404.html পৃষ্ঠায় পুনঃনির্দেশ করার জন্য একটি নোড.জেএস সার্ভার পাব কীভাবে?

আমি কিছু অনুসন্ধান করেছি এবং দেখে মনে হচ্ছে বেশিরভাগ ফলাফল এক্সপ্রেসের জন্য, তবে আমি আমার সার্ভারটি খাঁটি নোড.জেজে লিখতে চাই


1
আমি বিশ্বাস করতাম যে আমার অ্যাপটি খাঁটি নোড.জেজে ভাল, তবে এক্সপ্রেস ইনস্টল করার পরে খুব খুশি হয়েছে। আমি এখনই এক্সপ্রেস ছাড়াই নোড এসপিএ / রেস্টস্টুল ওয়েব সার্ভিস আর্কিটেকচারটি কল্পনা করতে পারি না।
— গ্রাহাম

উত্তর:


193

"ভুল" url নির্ধারণের যুক্তিটি আপনার অ্যাপ্লিকেশনের সাথে নির্দিষ্ট specific আপনি একটি রিফস্টুল অ্যাপ্লিকেশন করছেন তবে এটি একটি সাধারণ ফাইলের ত্রুটি বা অন্য কিছু খুঁজে পাওয়া যায় না। একবার আপনি এটি বুঝতে পেরে গেলে, পুনর্নির্দেশ পাঠানো যতটা সহজ:

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

এটি আমার 404 টি এইচটিএমএল পৃষ্ঠাটি দেখায় না, এটি কেবল শিরোনাম দেখায় show
— জাজং নগুইন

7
@ ম্যাজিক সত্য নয় চেষ্টা করুন Location: /এবং এটি আপনাকে মূল ফোল্ডারে নিয়ে যাবে।
— user3459110

আউওয়ালের সাথে একমত। আমি ব্যবহার করছি'Location': '/path/to/my/servers/content'
— মিলি স্মিথ

73

এটি ব্যবহার করা সম্ভব:

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

73
কেবল প্রকাশে। নেটিভ নোড.জেএস অ্যাপে নেই।
— সের্গেই ইয়ারটস্কি

@ তরুনজি মন্তব্যটির জন্য ধন্যবাদ, আপনি যদি প্রশ্নের সম্পাদনার ইতিহাসের দিকে তাকান তবে দেখেন যে এটি সর্বদা এতটা পরিষ্কার ছিল না।
— ড্যানিয়েল ডব্লিউ। ক্রম্পটন

2
আমার ক্ষেত্রে রেজ.ডাইরেক্ট ('/ লগইন') কেবলমাত্র এজ্যাক্স কলটির প্রতিক্রিয়াতে লগইন। Html সামগ্রী প্রেরণ করে। আমি কীভাবে পৃষ্ঠাটি খুলব?
— তরুন

পুরাতন পোস্ট, তবে আপনি হয়ত রেসডাইরেক্ট (' লোকালহোস্ট: 5000 / লগইন' ) এর মতো কিছু খুঁজছেন , বিশেষত যদি আপনি নিজের সামনের চেয়ে অন্য কোনও বন্দরে আপনার এক্সপ্রেস সার্ভার চালাচ্ছেন I
— jboxxx

18

অনুপস্থিত ফাইল / সংস্থান নির্দেশ করতে এবং একটি 404 পৃষ্ঠা পরিবেশন করতে আপনাকে পুনঃনির্দেশ করার দরকার নেই। একই অনুরোধে আপনাকে অবশ্যই স্থিতির কোডটি 404 এ সেট করা এবং প্রতিক্রিয়া বডি হিসাবে আপনার 404 এইচটিএমএল পৃষ্ঠার বিষয়বস্তু সহ প্রতিক্রিয়া উত্পন্ন করতে হবে। নোড.জেএস-এ এটি প্রদর্শনের জন্য নমুনা কোডটি এখানে দেওয়া হয়েছে।

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!

এইচটিটিপি এস-এ পুনর্নির্দেশ করুন

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অংশ বাদে ভ্যানিলা নোড কোডের মতো দেখাচ্ছে । নোডজেএস-এ আপনি এমন একটি হ্যান্ডলার লিখুন যা দুটি পরামিতি গ্রহণ করে (request, response)এবং উত্তরের সমস্ত কলগুলি responseঅবজেক্টে রয়েছে।
— অ্যালেক্সচফি

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);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.