मैं अपने एक्सप्रेस / नोड सर्वर पर 404 त्रुटि का अनुकरण करना चाहता हूं। मैं उसे कैसे कर सकता हूँ?
मैं अपने एक्सप्रेस / नोड सर्वर पर 404 त्रुटि का अनुकरण करना चाहता हूं। मैं उसे कैसे कर सकता हूँ?
जवाबों:
आजकल प्रतिक्रिया वस्तु पर इसके लिए एक समर्पित status
कार्य है । कॉल करने से पहले बस इसे कहीं पर चेन कर लें send
।
res.status(404) // HTTP status 404: NotFound
.send('Not found');
res.status(404).render('error404')
res.status(404);
एक प्रतिक्रिया AFAIK नहीं है। इसे या तो किसी चीज़, जैसे res.status(404).end();
या आपके दूसरे उदाहरण के साथ जंजीर में बांधने की ज़रूरत है, या इसके बाद इसका अनुसरण करने की ज़रूरत है res.end();
, जैसेres.send('Not found');
res.sendStatus(404)
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
res.status(404)
नहीं है res.sendStatus(404)
।
res.sendStatus(404)
सही है। यह बराबर हैres.status(404).send()
res.sendStatus(404);
के बराबर है res.status(404).send('Not Found')
आपको इसका अनुकरण नहीं करना है। res.send
मेरा मानना है कि दूसरा तर्क स्थिति कोड है। उस तर्क के लिए बस 404 पास करें।
मुझे स्पष्ट करना चाहिए कि: expressjs.org पर प्रलेखन के अनुसार ऐसा लगता है कि किसी भी संख्या को पारित करने के res.send()
लिए स्थिति कोड के रूप में व्याख्या की जाएगी। तो तकनीकी रूप से आप दूर हो सकते हैं:
res.send(404);
संपादित करें: मेरा बुरा, मैं के res
बजाय मतलब था req
। इसे प्रतिक्रिया पर बुलाया जाना चाहिए
संपादित करें: एक्सप्रेस 4 के अनुसार, send(status)
विधि को हटा दिया गया है। यदि आप एक्सप्रेस 4 या बाद का उपयोग कर रहे हैं, तो इसका उपयोग करें: res.sendStatus(404)
इसके बजाय। (टिप्पणी में टिप के लिए थैंक्यू @badcc)
res.send(404, "Could not find ID "+id)
.status(404).send('Not found')
साइट के अनुसार मैं नीचे पोस्ट करूँगा, यह सब है कि आप अपना सर्वर कैसे सेट करते हैं। एक उदाहरण वे दिखाते हैं:
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);
});
से एक्सप्रेस साइट , एक NotFound अपवाद को परिभाषित करने और फेंक जब भी आप मामले नीचे में एक 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!');
});
app.use(function(err, res, res, next) { if (err.message.indexOf('NotFound') !== -1) { res.status(400).send('Not found dude'); }; /* else .. etc */ });
IMO सबसे अच्छा तरीका next()
फ़ंक्शन का उपयोग करना है:
router.get('/', function(req, res, next) {
var err = new Error('Not found');
err.status = 404;
return next(err);
}
फिर त्रुटि को आपके त्रुटि हैंडलर द्वारा नियंत्रित किया जाता है और आप HTML का उपयोग करके त्रुटि को अच्छी तरह से स्टाइल कर सकते हैं।