主页 > 前端 > javascript >
来源:未知 时间:2016-03-14 09:28 作者:xxadmin 阅读:次
[导读] 说明:在后面课程学习中,我们会统一使用80端口用于监听请求。 添加完毕之后,通过右侧栏的“测试地址”来查看浏览器内容,当看到“Hello World!”内容就表明一个简单的express应用已...
说明:在后面课程学习中,我们会统一使用80端口用于监听请求。 添加完毕之后,通过右侧栏的“测试地址”来查看浏览器内容,当看到“Hello World!”内容就表明一个简单的express应用已经创建成功了。 get请求 get方法 —— 根据请求路径来处理客户端发出的GET请求。 格式: app.get(path,function(request, response)); path为请求的路径,第二个参数为处理请求的回调函数,有两个参数分别是request和response,代表请求信息和响应信息。 如下示例: var express = require('express'); var app = express(); app.get('/', function(request, response) { response.send('Welcome to the homepage!'); }); app.get('/about', function(request, response) { response.send('Welcome to the about page!'); }); app.get("*", function(request, response) { response.send("404 error!"); }); app.listen(80); 上面示例中,指定了about页面路径、根路径和所有路径的处理方法。并且在回调函数内部,使用HTTP回应的send方法,表示向浏览器发送一个字符串。 参照以上代码,试试自己设定一个get请求路径,然后浏览器访问该地址是否可以请求成功。 Middleware<中间件> 中间件(middleware)就是处理HTTP请求的函数,用来完成各种特定的任务,比如检查用户是否登录、分析数据、以及其他在需要最终将数据发送给用户之前完成的任务。 它最大的特点就是,一个中间件处理完,可以把相应数据再传递给下一个中间件。 2.一个不进行任何操作、只传递request对象的中间件,大概是这样: function Middleware(request, response, next) { next(); } 上面代码的next为中间件的回调函数。如果它带有参数,则代表抛出一个错误,参数为错误文本。 function Middleware(request, response, next) { next('出错了!'); } 抛出错误以后,后面的中间件将不再执行,直到发现一个错误处理函数为止。如果没有调用next方法,后面注册的函数也是不会执行的。 all函数的基本用法 格式: app.all(path,function(request, response)); 如下所示,我们使用all函数在请求之前设置响应头属性。 var express = require("express"); var app = express(); app.all("*", function(request, response, next) { response.writeHead(200, { "Content-Type": "text/html;charset=utf-8" }); //设置响应头属性值 next(); }); app.get("/", function(request, response) { response.end("欢迎来到首页!"); }); app.get("/about", function(request, response) { response.end("欢迎来到about页面!"); }); app.get("*", function(request, response) { response.end("404 - 未找到!"); }); app.listen(80); 上面代码参数中的“*”表示对所有路径有效,这个方法在给特定前缀路径或者任意路径上处理时会特别有用,不管我们请求任何路径都会事先经过all函数。 如果所示,如果我们跳过all函数又会怎么样呢,自己动手试一试? use基本用法1 格式: app.use([path], function(request, response, next){}); //可选参数path默认为"/"。 1. 使用中间件 app.use(express.static(path.join(__dirname, '/'))); 如上呢,我们就使用use函数调用express中间件设定了静态文件目录的访问路径(这里假设为根路径)。 2. 如何连续调用两个中间件呢,如下示例: var express = require('express'); var app = express(); app.use(function(request, response, next){ console.log("method:"+request.method+" ==== "+"url:"+request.url); next(); }); app.use(function(request, response){ response.writeHead(200, { "Content-Type": "text/html;charset=utf-8" }); response.end('示例:连续调用两个中间件'); }); app.listen(80); 回调函数的next参数,表示接受其他中间件的调用,函数体中的next(),表示将请求数据传递给下一个中间件。 上面代码先调用第一个中间件,在控制台输出一行信息,然后通过next(),调用第二个中间件,输出HTTP回应。由于第二个中间件没有调用next方法,所以req对象就不再向后传递了。 use基本用法2 var express = require("express"); var app = express(); app.use(function(request, response, next) { if(request.url == "/") { response.send("Welcome to the homepage!"); }else { next(); } }); app.use(function(request, response, next) { if(request.url == "/about") { response.send("Welcome to the about page!"); }else { next(); } }); app.use(function(request, response) { response.send("404 error!"); }); app.listen(80); 上面代码通过request.url属性,判断请求的网址,从而返回不同的内容。 回调函数 function(req, res) { }); 在后面的学习中,我们会经常和它打交道,牢牢记住它的格式吧! 获取主机名、路径名 req.host返回请求头里取的主机名(不包含端口号)。 req.path返回请求的URL的路径名。 如下示例: var express = require('express'); var app = express(); app.get("*", function(req, res) { console.log(req.path); res.send("req.host获取主机名,req.path获取请求路径名!"); }); app.listen(80); 试一试在浏览器中输入任意一个请求路径,通过req查看主机名或请求路径。 query基本用法 var express = require('express'); var app = express(); app.get("*", function(req, res) { console.log(req.query.参数名); res.send("测试query属性!"); }); app.listen(80); 通过req.query获取get请求路径的对象参数值。 格式:req.query.参数名;请求路径如下示例: 例1: /search?n=Lenka req.query.n // "Lenka" 例2: /shoes?order=desc&shoe[color]=blue&shoe[type]=converse req.query.order // "desc" req.query.shoe.color // "blue" req.query.shoe.type // "converse" 试一试get请求一个带参数路径,使用“req.query.参数名”方法获取请求参数值。 param基本用法 格式:req.param("参数名");请求路径如下示例: 例1: 获取请求根路径的参数值,如/?n=Lenka,方法如下: var express = require('express'); var app = express(); app.get("/", function(req, res) { console.log(req.param("n")); //Lenka res.send("使用req.param属性获取请求根路径的参数对象值!"); }); app.listen(80); 例2:我们也可以获取具有相应路由规则的请求对象,假设路由规则为 /user/:name/,请求路径/user/mike,如下: app.get("/user/:name/", function(req, res) { console.log(req.param("name")); //mike res.send("使用req.param属性获取具有路由规则的参数对象值!"); }); PS:所谓“路由”,就是指为不同的访问路径,指定不同的处理方法。 看了上面的示例,试一试使用req.param属性解析一个请求路径对象,并获取请求参数值。 params基本用法 格式:req.params.参数名; 例1. 如上课时请求根路径的例子,我们就可以这样获取,如下: var express = require('express'); var app = express(); app.get("/user/:name/", function(req, res) { console.log(req.params.name); //mike res.send("使用req.params属性获取具有路由规则的参数对象值!"); }); app.listen(80); 查看运行结果,和param属性功能是一样的,同样获取name参数值。 例2:当然我们也可以请求复杂的路由规则,如/user/:name/:id,假设请求地址为:/user/mike/123,如下: app.get("/user/:name/:id", function(req, res) { console.log(req.params.id); //"123" res.send("使用req.params属性复杂路由规则的参数对象值!"); }); 对于请求地址具有路由规则的路径来说,属性params比param属性是不是又强大了那么一点点呢! send基本用法 1.当参数为一个String时,Content-Type默认设置为"text/html"。 res.send('Hello World'); //Hello World 2.当参数为Array或Object时,Express会返回一个JSON。 res.send({ user: 'tobi' }); //{"user":"tobi"} res.send([1,2,3]); //[1,2,3] 3.当参数为一个Number时,并且没有上面提到的任何一条在响应体里,Express会帮你设置一个响应体,比如:200会返回字符"OK"。 res.send(200); // OK res.send(404); // Not Found res.send(500); // Internal Server Error send方法在输出响应时会自动进行一些设置,比如HEAD信息、HTTP缓存支持等等。 |
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com