第9天response 响应渲染 —跳转插件开发
跳转功能,顾名思义是打开一个链接,却跳转到另一个网址链接。看起来很神秘,其实都是在响应头信息做文章。
响应头的状态码设置为302,那么就表示要客户端进行跳转。
跳转插件开发
跳转功能,顾名思义是打开一个链接,却跳转到另一个网址链接。看起来很神秘,其实都是在响应头信息做文章。
响应头的状态码设置为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)
以下是视频演示
很赞哦! ( 0
)