এক্সপ্রেস / নোডের সাথে কীভাবে প্রোগ্রামটিতে 404 প্রতিক্রিয়া প্রেরণ করা যায়?


185

আমি আমার এক্সপ্রেস / নোড সার্ভারে একটি 404 ত্রুটি অনুকরণ করতে চাই। আমি এটা কিভাবে করবো?


7
কীভাবে "সিমুলেটেড" একটি "বাস্তব" এর থেকে আলাদা হবে?
জন হান্না

উত্তর:


273

আজকাল রেসপন্স অবজেক্টে এর জন্য একটি ডেডিকেটেড statusফাংশন রয়েছে । আপনি কল করার আগে কোথাও এটি চেইন করুন send

res.status(404)        // HTTP status 404: NotFound
   .send('Not found');

7
এটি রেন্ডার করা পৃষ্ঠাগুলির সাথেও কাজ করে:res.status(404).render('error404')
jmu

20
এটি নিজেই লক্ষ্য করে res.status(404);না যে এএফাইককে একটি প্রতিক্রিয়া পাঠাবে। এটি হয় কিছু দিয়ে শৃঙ্খলিত করা দরকার, উদাহরণস্বরূপ res.status(404).end();বা আপনার দ্বিতীয় উদাহরণ, বা এটি অনুসরণ করা দরকার উদাহরণস্বরূপ res.end();,res.send('Not found');
UpTheCric

1
@ ইউপিক্রিক, আমি এই বিভ্রান্তির সম্ভাবনা এড়াতে কোড থেকে প্রথম উদাহরণটি সরিয়ে ফেলব।
ড্রয় নোকস

1
সংক্ষিপ্ত সংস্করণres.sendStatus(404)
বেনতেশা

47

এক্সপ্রেস 4.x এর আপডেট হওয়া উত্তর

res.send(404)এক্সপ্রেসের পুরানো সংস্করণ হিসাবে ব্যবহার না করে নতুন পদ্ধতিটি হ'ল:

res.sendStatus(404);

এক্সপ্রেস "পাওয়া যায়নি" পাঠ্যের সাহায্যে খুব বেসিক 404 টি প্রতিক্রিয়া প্রেরণ করবে:

HTTP/1.1 404 Not Found
X-Powered-By: Express
Vary: Origin
Content-Type: text/plain; charset=utf-8
Content-Length: 9
ETag: W/"9-nR6tc+Z4+i9RpwqTOwvwFw"
Date: Fri, 23 Oct 2015 20:08:19 GMT
Connection: keep-alive

Not Found

1
আমি নিশ্চিত যে এটি ঠিক res.status(404)না res.sendStatus(404)
জ্যাক উইলসন

4
res.sendStatus(404)সঠিক. এটি সমতুল্যres.status(404).send()
জাস্টিন জনসন

2
হ্যাঁ res.sendStatus(404); সমান res.status(404).send('Not Found')
রিক

@ জ্যাকউইলসন এখন এটি কি ??
ব্ল্যাকশিপ

43

আপনি এটি অনুকরণ করতে হবে না। res.sendআমি বিশ্বাস করি যে দ্বিতীয় যুক্তি হল স্থিতি কোড। এই যুক্তিতে কেবল 404 পাস করুন।

আমাকে এটি স্পষ্ট করতে দাও: এক্সপ্রেস.আর.আর্গ.তে নথিপত্র অনুসারে মনে হয় কোনও সংখ্যা পাস হয়েছে passedres.send() স্থিতি কোড হিসাবে ব্যাখ্যা হবে। প্রযুক্তিগতভাবে আপনি এর সাথে পালাতে পারেন:

res.send(404);

সম্পাদনা: আমার খারাপ, আমি এর resপরিবর্তে বোঝাতে চাইছি req। এটি প্রতিক্রিয়া বলা উচিত

সম্পাদনা: এক্সপ্রেস 4 হিসাবে, send(status)পদ্ধতিটি অবচয় করা হয়েছে। আপনি যদি 4 বা তার পরে এক্সপ্রেস ব্যবহার করেন তবে res.sendStatus(404)পরিবর্তে : ব্যবহার করুন। (মন্তব্যে টিপটির জন্য ধন্যবাদ @ ব্যাডসিসি)


1
আপনি 404 এর সাথে একটি বার্তাও পাঠাতে পারেন: res.send(404, "Could not find ID "+id)
পাইলিনাক্স

কোনও স্থিতি কোড প্রেরণ সরাসরি 4.x-এ অবমূল্যায়ন করা হয় এবং সম্ভবত কোনও সময়ে সরিয়ে দেওয়া হবে। সাথে .status(404).send('Not found')
ম্যাট ফ্লেচার

2
এক্সপ্রেস 4 এর জন্য: "এক্সপ্রেস অবহেলিত রেস.সেন্ড (স্থিতি): পরিবর্তে res.sendStatus (স্থিতি) ব্যবহার করুন"
ব্যাডপিসি

10

নীচে পোস্ট করা সাইট অনুসারে আপনি নিজের সার্ভারটি সেট আপ করবেন এটিই। একটি উদাহরণ তারা দেখায় তা হ'ল:

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

function start(route, handle) {
  function onRequest(request, response) {
    var pathname = url.parse(request.url).pathname;
    console.log("Request for " + pathname + " received.");

    route(handle, pathname, response);
  }

  http.createServer(onRequest).listen(8888);
  console.log("Server has started.");
}

exports.start = start;

এবং তাদের রুট কার্য:

function route(handle, pathname, response) {
  console.log("About to route a request for " + pathname);
  if (typeof handle[pathname] === 'function') {
    handle[pathname](response);
  } else {
    console.log("No request handler found for " + pathname);
    response.writeHead(404, {"Content-Type": "text/plain"});
    response.write("404 Not found");
    response.end();
  }
}

exports.route = route;

এটি এক উপায়। http://www.nodebeginner.org/

অন্য সাইট থেকে, তারা একটি পৃষ্ঠা তৈরি করে এবং তারপরে এটি লোড করে। এটি আপনি যা খুঁজছেন তার থেকেও বেশি কিছু হতে পারে।

fs.readFile('www/404.html', function(error2, data) {
            response.writeHead(404, {'content-type': 'text/html'});
            response.end(data);
        });

http://blog.poweredbyalt.net/?p=81


9

এক্সপ্রেস সাইট থেকে একটি নটফাউন্ড ব্যতিক্রম সংজ্ঞায়িত করুন এবং যখনই আপনি একটি 404 পৃষ্ঠা পেতে চান বা নীচের ক্ষেত্রে / 404 এ পুনর্নির্দেশ করতে চান তখন নিক্ষেপ করুন:

function NotFound(msg){
  this.name = 'NotFound';
  Error.call(this, msg);
  Error.captureStackTrace(this, arguments.callee);
}

NotFound.prototype.__proto__ = Error.prototype;

app.get('/404', function(req, res){
  throw new NotFound;
});

app.get('/500', function(req, res){
  throw new Error('keyboard cat!');
});

1
এই উদাহরণ কোডটি আপনার উল্লেখ করা লিঙ্কটিতে আর নেই। এটি কি এক্সপ্রেসের আগের সংস্করণে প্রযোজ্য?
ড্রয় নোকস

এটি আসলে স্টিলটি বিদ্যমান কোডে প্রযোজ্য, আপনাকে যা করতে হবে তা ত্রুটিটি ধরার জন্য ত্রুটি হ্যান্ডেল মিডলওয়্যারটি ব্যবহার করা। উদা:app.use(function(err, res, res, next) { if (err.message.indexOf('NotFound') !== -1) { res.status(400).send('Not found dude'); }; /* else .. etc */ });
অ্যালিসিওএলেক্স

0

আইএমও এর সর্বোত্তম উপায় হল next()ফাংশনটি ব্যবহার করা :

router.get('/', function(req, res, next) {
    var err = new Error('Not found');
    err.status = 404;
    return next(err);
}

তারপরে ত্রুটিটি আপনার ত্রুটি হ্যান্ডলার দ্বারা পরিচালনা করা হয় এবং আপনি HTML ব্যবহার করে ত্রুটিটি সুন্দরভাবে স্টাইল করতে পারেন style

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