[英]Node.js & Express.js: How to redirect to another router/middleware
[英]node.js - redirect to another url in middleware
在我的MEAN SPA应用程序中,我想将所有url请求重定向到带有其他参数的索引 。 例如,当用户键入http://localhost:3003/
,它应调用index page 。 当用户键入http://localhost:3003/game/playstation/ps4
,它还应该调用index页面 ,并带有game, palystation, ps4
, game, palystation, ps4
等额外参数,但它会重定向到没有额外参数的索引 。 我的代码如下:
app.use(function(req, res, next) {
// get the url without main domain address
var original_url = req.originalUrl;
// convert string url to array
var url_part = original_url.split('/');
// remove first array, bcz first is always ''
url_part.shift();
// check if url is main url request without any parameter
if( url_part[0] !== '' ) {
// if not, then store all url_part array
req.request_url = url_part;
// redirct to main '/' call
// when it redirect to main url, then req.request is empty
res.redirect('/');
}
next();
});
app.get('/', function( req, res) {
// here req.request_url is always 'undefined'
console.log("req.request_url : ", req.request_url);
return res.render('index.ejs', {
url: req.request_url
});
});
编辑
我必须重定向到索引路由,而不要重定向到其他路由,因为在我的SPA应用程序中,我只是使用默认的js,css等加载了索引路由,所有其他路由都将从api调用。
提前致谢。
您可以这样操作,并且两者都将映射到相同的函数,但是如果从'/'路由映射,则将设置参数或为null
var indexPageFunc = function(res, req){
var type = req.param('type'); // game or null
var system = req.param('system'); // playstation or null
var version = req.param('version'); // ps4 or null
res.render('index.ejs');
}
app.get('/', indexPageFunc);
app.get('/:type/:system/:version, indexPageFunc);
你不能那样做。 将302重定向到浏览器,然后用户向您的服务器发出新的单独请求。
您可以为所有路线返回相同的响应
app.get('*', function(req, res) {
// get the url without main domain address
var original_url = req.originalUrl;
// convert string url to array
var url_part = original_url.split('/');
// remove first array, bcz first is always ''
url_part.shift();
res.render('index.ejs', {
url: url_part
});
});
您有两个选择:重定向到另一个URL并包含GET参数。
var express = require('express'),
app = express();
app.use(function(req, res, next) {
var url_part = req.originalUrl.split('/');
console.log('' + req.originalUrl + ' => ' + url_part);
url_part.shift();
if( url_part[0] !== '' ) {
//You could add as GET parameters, but it will be shown to the user
res.redirect('/?request_url=' + url_part);
}
next();
});
app.get('/', function (req, res) {
// here req.request_url is always 'undefined'
console.log("req.request_url : ", req.request_url);
return res.json({
url: req.request_url
});
});
app.listen(8080);
否则,您将不得不找到一种方法来重写URL,并进行POST请求。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.