मेरे पास /about
, /contact
, /home
और /lessons
मार्गों के साथ सरल वेबपृष्ठ है। /lessons
को छोड़कर सभी मार्ग ठीक काम करते हैं। मुझे तुरंत रीडायरेक्ट लूप (Error 310 (net::ERR_TOO_MANY_REDIRECTS): There were too many redirects
) मिलता है।नोड express.js के साथ रीडायरेक्ट लूप
यहाँ मेरी मुख्य server.js
कोड है:
var port = process.env.PORT || 8888;
var app = require('./app').init(port);
var markdown = require('./markdown');
var lessons = require('./lessons.json').lessons;
// app.use(function(req,res,next) {
// console.log('adding lessons to locals');
// res.locals.date = new Date().toLocaleDateString();
// res.locals.lessons = lessons;
// next();
// });
// app.use(app.router);
app.get('/', function (req, res) {
console.log('controller is : home');
res.locals.controller = 'home';
res.render('home');
});
app.get('/:controller', function (req, res, next) {
var controller = req.params.controller;
console.log('controller is : '+ controller);
if (controller == 'about' || controller == 'contact') {
res.locals.controller = controller;
res.render(controller);
} else {
console.log('next was taken!');
next();
}
});
app.get('/lessons', function(req, res) {
res.locals.lessons = lessons;
console.log('controller is : lessons');
res.render('lessons');
});
app.get('/lessons/:lesson', function(req, res) {
console.log('controller is : lesson');
res.locals.controller = 'lessons';
res.send('gimmie the lesson');
});
/* The 404 Route (ALWAYS Keep this as the last route) */
app.get('/*', function (req, res) {
console.log('got 404 request to ' + req.url);
res.render('404');
});
और यहाँ app.js
फ़ाइल जो सर्वर प्रारंभ के लिए प्रयोग किया जाता है है:
var express = require('express');
var slashes = require('connect-slashes');
exports.init = function (port) {
var app = express();
app.use(express.static(__dirname + '/public'));
// add middleware to remove trailing slash in urls
app.use(slashes(false));
app.set('views', __dirname + '/views')
app.set('view engine', 'ejs');
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.logger());
app.enable("jsonp callback");
if ('development' == app.get('env')) {
app.use(express.errorHandler({
dumpExceptions: true,
showStack: true
}));
app.use(express.logger({
format: ':method :url'
}));
}
if ('production' == app.get('env')) {
app.use(express.errorHandler());
}
app.use(function (err, req, res, next) {
console.log('Oops, something went wrong');
res.render('500.ejs', {
locals: {
error: err
},
status: 500
});
});
app.listen(port);
console.log("Listening on port %d in %s mode", port, app.settings.env);
return app;
}
मैं node-inspector
साथ अनुप्रयोग डिबगिंग की कोशिश की है, लेकिन यह एप्लिकेशन के बाद से बेकार है मैच करने का प्रयास करने के लिए app.get
एस में से किसी एक में जाना प्रतीत नहीं होता है। यह तुरंत मुझे त्रुटि देता है जब मैं तक पहुँचने का प्रयास localhost:8888/lessons
संपादित करें:
मुझे लगता है कि मैं इस समस्या की जड़ पाया है:
- मेरे
/public
dir एकlessons
फ़ोल्डर है - मेरा
/views
डीआईआरlessons.ejs
देखें
जब मैं /public/lessons
को /public/lessons11
में बदलता हूं उदाहरण के लिए, समस्या हल हो जाती है। क्या कोई मुझे बता सकता है कि मूल परिदृश्य में एक्सप्रेस प्रवाह क्या है जो रीडायरेक्ट लूप का कारण बनता है? भी, इसे हल करने के लिए मैं क्या कर सकता हूं?
धन्यवाद
ग्रेट स्पष्टीकरण! '{रीडायरेक्ट: झूठी} 'जोड़कर वास्तव में मदद मिली। क्या आपको लगता है कि तथ्य यह है कि मैंने स्थिर रीडायरेक्ट को अक्षम कर दिया है भविष्य में समस्याएं पैदा कर सकती हैं? मैं, इसके बजाय, सभी स्थैतिक फ़ाइलों को 'स्थिर 'उपसर्ग पर कॉल कर सकता हूं:' app.use ('/static ', express।स्थैतिक (__ dirname + '/ public')); 'आप क्या विकल्प मानते हैं बेहतर है? – Michael
जब कोई निर्देशिका नाम का अनुरोध करता है तो क्या आपको कभी भी 'index.html' की सेवा करने की क्षमता की आवश्यकता होगी? यदि नहीं, तो मुझे नहीं लगता कि आप समस्याओं में भाग लेंगे। – robertklep
(हालांकि अपने स्वयं के उपसर्ग के तहत स्थैतिक संसाधन बढ़ाना एक क्लीनर समाधान है) – robertklep