我有簡單的網頁與,/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
s試圖匹配。這immidiately給我的錯誤,當我嘗試訪問localhost:8888/lessons
編輯:
我想我已經找到了問題的根源:
- 我
/public
DIR有lessons
文件夾 - 我的
/views
dir有一個lessons.ejs
查看
當我改變/public/lessons
到/public/lessons11
例如,問題得到解決。有人可以向我解釋原始情況下導致重定向循環的快遞流?另外,我能做些什麼來解決它?
感謝
很好的解釋!加入'{redirect:false}'的確有幫助。你認爲我禁用靜態重定向的事實可能會導致未來的問題?相反,我可以將所有靜態文件調用掛載到靜態前綴:app.use('/ static',express。靜態(__ dirname +'/ public')); '你認爲什麼選擇更好? – Michael 2013-03-17 07:51:44
當有人請求目錄名時,你是否曾經需要能夠自動提供'index.html'的能力?如果沒有,我認爲你不會遇到問題。 – robertklep 2013-03-17 07:55:48
(雖然在自己的前綴下安裝靜態資源是一個更清潔的解決方案) – robertklep 2013-03-17 08:01:53