跳转插件开发
跳转功能,顾名思义是打开一个链接,却跳转到另一个网址链接。看起来很神秘,其实都是在响应头信息做文章。
响应头的状态码设置为302,那么就表示要客户端进行跳转。而跳转到哪里就需要指定响应头的Location。理论就这些,落到实处才是重点,下面我们就开发这个跳转插件。
module.exports = function(req,res,next){
res.redirect = function(url){
res.writeHead(302,{
Location: location(req,url)
})
res.end();
}
next();
}
// 返回要跳转的URL绝对地址
function location(req,url){
// 如果是完整的网址
if(/^http:\/\//.test(url)){
return url;
}else if(/^\//.test(url)){ // 如果是本地根目录网址
return 'http://' + req.headers.host + url;
}else{
return 'http://' + req.headers.host + '/' + req.url + '/' + url;
}
}哇!这代码有些复杂了,其实没什么,location方法是用来返回三种不同的url形式,我们用一下例子做个说明。
在index.js中加入以下代码:
exports.text = require("./lib/redirect");通过location方法,要达到的效果是:
/url2 返回 http://xxxxx/url2
url2 返回 http://xxxxx/url/url2
下面做一个例子,来试验这几种用法:
var fk = require("../..")
,App = fk.App
,redirect = fk.redirect
,text = fk.text
,app = new App;
app.use(fk.text);
app.use(fk.redirect); // 加载跳转插件
app.get("/url1",function(req,res){
res.redirect("http://baidu.com");
})
app.get("/url2",function(req,res){
res.redirect('/1url');
})
app.get("/url3",function(req,res){
res.redirect("2url")
})
app.get("/1url",function(req,res){
res.text("1 url");
})
app.get("/url3/:u",function(req,res){
res.text(req.params.u);
})
app.listen(3000)以下是视频演示