跳转插件开发

跳转功能,顾名思义是打开一个链接,却跳转到另一个网址链接。看起来很神秘,其实都是在响应头信息做文章。

响应头的状态码设置为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方法,要达到的效果是:

下面做一个例子,来试验这几种用法:

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)

以下是视频演示