我試圖做一個簡單的301重定向。我的代碼看起來是這樣的:使用express和node.js重定向301 GET不被稱爲
app.get('/',function(req,res){
console.log(req.get('host')+req.originalUrl);
if(req.get('host')+req.originalUrl == "facebook.com:3000/"){
res.redirect(301,'https://youtube.com');
} else {
res.redirect(301,'https://google.com');
}
});
所以我做了什麼是編輯我的主機文件,以便facebook.com被鏈接到本地主機(127.0.0.1) 問題是我的app.get()
沒有被稱爲除幾次(通常當我不看app.js文件一段時間,然後再次使用它)。在那些時間之後,即使我編輯文件重定向到其他網站,它也會始終重定向到同一網站。這裏是另外一些相關的代碼如下:
app.locals.cacheBuster = Date.now();
app.set('port', process.env.PORT || argv.p || 3000);
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
app.use(express.compress());
app.use(express.favicon(path.join(__dirname, 'public/img/favicon.ico')));
app.use(express.logger('dev'));
app.use(express.cookieParser());
app.use(express.json());
app.use(express.urlencoded());
app.use(expressValidator());
app.use(express.methodOverride());
app.use(express.session({
secret: 'your secret code',
store: new MongoStore({
db: mongoose.connection.db,
auto_reconnect: true
})
}));
app.use(passport.initialize());
app.use(passport.session());
app.use(function(req, res, next) {
res.locals({
user: req.user,
cookies: req.cookies,
pullup: { // global client-side JS object
baseUrl: req.protocol + '://' + req.get('host')
}
});
if (!_.isObject(req.session.flash) || !Object.keys(req.session.flash).length) {
req.session.windowscrolly = 0;
}
if (req.body.windowscrolly) req.session.windowscrolly = req.body.windowscrolly;
res.locals.windowscrolly = req.session.windowscrolly;
res.setHeader("Content-Security-Policy", "script-src 'self' https://apis.google.com http://sysinct.herokuapp.com; frame-src 'self' https://gitter.im;");
res.setHeader("X-Frame-Options", "DENY");
next();
});
app.use(flash());
app.use(less({ src: __dirname + '/public', compress: true }));
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public'), { maxAge: week }));
app.use(function(req, res) {
res.render('404', { status: 404 });
});
app.use(function(err, req, res, next){
console.error("req: "+req +"\nerror:"+err.stack);
res.statusCode = 500;
res.render('error',{error:err});
});
app.locals.timeago = timeago;
...最終,
app.listen(app.get('port'), function() {
console.log("✔ Express server listening on port %d in %s mode", app.get('port'), app.settings.env);
});
我試着將我的app.get功能爲解決此塊的代碼我不同的地方(」我知道我不會把app.get()
放在這個例子中,因爲我不知道該把它放在哪裏),因爲我讀到它與app.use(app.router)
和其他中間件有關的順序,但是我沒有找到原因app.get()
未被調用。
- 我想知道爲什麼
app.get()
不會被調用 - 如果我重定向的方式是正確的。 謝謝!
是的,我把快遞放在最上面。你能否詳細說明你的第二條評論?感謝您的幫助。 – vvayne 2014-08-30 02:27:31
明白了。不是一個明確的問題,而是瀏覽器緩存。 – vvayne 2014-08-30 16:57:22