快速重新启动匹配路由-重定向
Express restart matching route - Redirect
我想在处理请求时更改url地址。实现简单重定向。如何更改当前url并重新启动express中的路由匹配处理?
例如,我想要这样的东西:
app.get "/r/*", (req, res, next) ->
changeURL = "/myverylongurl/param1....."
next(...)
以及其中route/myverylongurl/…的代码处理程序。。。。
app.get "/myverylongurl/*", (req, res, next) ->
# complex thing here
所以当有人提出要求时http://myserverfake111.com/r/param1实际上,系统最终会处理块"这里的复杂事物"。
使用req.session
跟踪重定向中的对象。您的问题不清楚重定向的作用,但如果您不需要保存任何内容,可以跳过req.session,只需在/r/*
的请求处理程序函数中执行res.redirect("/myverylongurl/param1.....")
。
var http = require('http')
var express = require('express');
var app = module.exports = express();
app.use(express.logger());
app.use(express.cookieParser('asdf 0a98234ja af anekjoavzcx'));
app.use(express.session());
app.use(app.router);
app.get('/'
,function(req, res){
res.send(200, 'Hi, /')
});
app.get("/r/*"
,function(req, res, next){
//res.redirect('/myverylongurl?param1=true');
req.session.changeURL = "/myverylongurl?param1=true";
next();
},function(req, res, next){
res.redirect('/foobar');
});
app.get('/foobar', function(req, res){
var destination = req.session.changeURL || "/";
if(req.session.changeURL){ delete req.session.changeURL };
res.redirect(destination);
});
// development only
if ('development' == app.get('env')) {
app.use(express.errorHandler());
}
http.createServer(app).listen(3000, function(){
console.log('Express server listening on port 3000');
});
听起来您希望用相同的代码处理两条路由。如果您不想在res.redirect
中使用301重定向,请考虑组织您的代码,以便分离共享逻辑并为两个路由执行它。您仍然可以使用req.session
来维护内部处理程序函数链上的变量作用域,即使它不发送重定向。或者,您可以通过回调将复杂代码放置在自己的函数中,并根据需要执行。
var http = require('http')
var express = require('express');
var app = module.exports = express();
app.use(express.logger('dev'));
app.use(express.cookieParser('asdf 0a98234ja af anekjoavzcx'));
app.use(express.session());
app.use(app.router);
app.get('/' ,function(req, res){ res.send(200, 'Hi, /') });
// strategy 1
function complexThings1(req, res, next){
console.log('#complex stuff started')
process.nextTick(function(){ // example asynchronous function
req.session.complexOutput="2i+3";
console.log('#complex stuff finished')
next();
});
};
app.get('/myverylongurl'
,complexThings1
,function(req, res){
res.send(200, 'complex things 1 output: '+req.session.complexOutput);
});
app.get("/r/*"
,complexThings1
,function(req, res){
res.send(200, 'complex things 1 output: '+req.session.complexOutput);
});
// strategy 2
function complexThings2(input, callback){
console.log('#complex stuff finished');
process.nextTick(function(){ // example asynchronous function
console.log('#complex stuff finished');
var output = input
callback(null, output);
});
};
app.get('/s/*', function(req, res){
complexThings2('8i+3.14', function(err, output){
res.send(200, 'complex things 2 output: '+output);
});
});
// development only
if ('development' == app.get('env')) {
app.use(express.errorHandler());
}
http.createServer(app).listen(3000, function(){
console.log('Express server listening on port 3000');
});
相关文章:
- Hapi-js重定向到另一个带有额外请求数据的路由
- 无法使用角度路由提供程序重定向
- 哈希重定向之前使用斜杠的主干路由
- 很难理解laravel中的重定向/路由
- 数据切换=“;下拉菜单”;激活路由重定向,而不是yeoman中的下拉菜单
- 路由提供程序否则重定向到不起作用
- AngularJS仅在浏览器的后退按钮上重定向路由
- AngularJs 和 Codeigniter 路由会导致无限重定向循环
- 余烬重定向仅在您第一次进入路由时触发
- 拉拉维尔重定向::路由不起作用
- 余烬父路由重定向到子路由
- Ionic (AngularJS) - 重定向用户和路由
- 快速重新启动匹配路由-重定向
- 角度路由-重定向到外部站点
- 如何根据接受标头进行路由重定向或发回JSON
- 如何在不使用组件的情况下从angular2路由重定向到外部URL
- js单页应用(SPA) -将所有丢失/未使用的路由重定向到单个控制器动作
- Angular路由重定向到404
- React Router默认路由重定向到/home
- 烬测试路由重定向