nodejs express

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)就是处理HTTP请求的函数,用来完成各种特定的任务,比如检查用户是否登录、分析数据、以及其他在需要最终将数据发送给用户之前完成的任务。 它最大的特点就是,一个中间件处理完,可以把相应数据再传递给下一个中间件。


2.一个不进行任何操作、只传递request对象的中间件,大概是这样:


function Middleware(request, response, next) { 
   next();
}
上面代码的next为中间件的回调函数。如果它带有参数,则代表抛出一个错误,参数为错误文本。


function Middleware(request, response, next) { 
   next('出错了!');
}
抛出错误以后,后面的中间件将不再执行,直到发现一个错误处理函数为止。如果没有调用next方法,后面注册的函数也是不会执行的。










和get函数不同app.all()函数可以匹配所有的HTTP动词,也就是说它可以过滤所有路径的请求,如果使用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函数。










use是express调用中间件的方法,它返回一个函数。


格式:app.use([path], function(request, response, next){});


//可选参数path默认为"/"。


使用中间件
app.use(express.static(path.join(__dirname, '/')));
如上呢,我们就使用use函数调用express中间件设定了静态文件目录的访问路径(这里假设为根路径)。


如何连续调用两个中间件呢,如下示例:
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方法不仅可以调用中间件,还可以根据请求的网址,返回不同的网页内容,如下示例:


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);




















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);


















query基本用法
query是一个可获取客户端get请求路径参数的对象属性,包含着被解析过的请求参数对象,默认为{}。


var express = require('express');
var app = express();
 
app.get("*", function(req, res) {
    console.log(req.query.参数名);
    res.send("测试query属性!");
});
 
app.listen(80);










param基本用法
和属性query一样,通过req.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:所谓“路由”,就是指为不同的访问路径,指定不同的处理方法。










send基本用法
send()方法向浏览器发送一个响应信息,并可以智能处理不同类型的数据。格式如下:


res.send([body|status], [body]);
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缓存支持等等。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值