Express 学习笔记(1):Express中的路径(Routes)

(注:部分示例摘自或修改自《Pro Node.js for Developers》)

Express Routes(路径)

Express中的一大特色就是方便的“路径”管理方式。所谓路径,就是指用户所访问的目的地和访问的方法(HTTP method)。例如“用GET方法访问/index”是一个路径、“用POST方法去访问/new_post”也是一个路径。总之,在Express中的路径就是指“URL”+“方法”。

抛开Express,单纯使用Node.js自带的http模块,也能实现对于路径的处理。例如下面一段代码,能够响应“/”、“/foo”、“/bar”这三个URL的GET方法:

//require()方法用于引入模块,其接收“模块名”作为参数,并且返回这个模块的对象。
var http = require("http");  
//使用http模块下的createServer()方法可以创建一个服务器对象。
//这个函数接收一个函数类型的参数(乘这个函数为回调函数),该参数是在收到HTTP请求报文时被调用。
//这个回调函数接收两个参数,其中request中封装了客户端发送给服务器的请求报文中的各种数据。
//response中封装了将要发回给客户端的响应报文的各种数据。
http.createServer(function(request, response){  
    //下面使用了if - else if - ... - else的方式去选择路由

    //使用request对象的两个参数(url、method)来判断当前请求的URL和方法,并且做出响应。
    //此处响应了“/”这个URL的“GET”方法。
    if(request.url === "/" && request.method === "GET"){

        //response对象有一个writeHead()方法,它的第一个参数是状态码(数值型),第二个参数是响应报文的首部。
        response.writeHead(200,{
            //"Content-Type"是HTTP报文中的一个参数,表示了这篇文当的内容类型
            "Content-Type": "text/html"
        });

        //response对象有一个end()方法,功能是将其参数中的字符串作为响应报文的报文体->结束报文->将报文发出去。
        response.end("Hello <strong>home page</strong>");

    //此处响应了“/foo”这个URL的“GET”方法
    }else if (request.url === "/foo" && request.method === "GET"){
        response.writeHead(200,{
            "Content-Type": "text/html"
        });
        response.end("Hello <strong>foo</strong>");
    }else if (request.url === "/bar" && request.method === "GET"){
        response.writeHead(200,{
            "Content-Type": "text/html"
        });
        response.end("Hello <strong>bar</strong>");

    //当经过了各个else-if后仍然没有找到对应的操作,则说明客户端的请求地址是不存在的,此时发送报文的状态码为404(HTTP 404 Not Found)
    }else{
        response.writeHead(404,{
            "Content-Type": "text/html"
        });
    response.end("404 Not Found";)
    }
}).listen(8000);
//前述直接使用http.createServer()会返回一个Server对象,这个对象的listen()方法是用来将服务器的操作绑定到参数中的端口号(术语叫做监听端口)。
//调用方法后服务器开始针对发往本机某端口号的报文进行响应

在上面这个例子中,我们直接使用了Node.js中的http模块,用非常麻烦的方法实现了对不同URL和不同method的响应操作。其中大量的代码都是重复而且低效的。Express等框架的出现,就是为了让我们将工作重心着眼于业务逻辑的实现,而不用关乎诸如“处理HTTP报文”这样低级的工作。所以Express提供了一套便捷的方法去处理路径。

再看看如何使用Express来实现上面例子中的全部功能:

var express = require("express");  
var http = require("http");  
var app = express();

app.get("/" function(request, response, next){  
    response.send("Hello <strong>home page</strong>");
});
//req和res分别是request和response的缩写
app.get("/foo", function(req, res, next){  
    res.send("Hello <strong>foo</strong>");
});
app.get("/bar", function(req, res, next){  
    res.send("Hello <strong>bar</strong>");
});

http.createServer(app).listen(8000);

上面的例子中使用app的get()函数定义了三个路径的响应方式。get函数接收两个参数,第一个参数是个字符串,用来表示URL,第二个参数是一个回调函数,当这个URL被请求后将会执行这个函数。除了get之外,app对象还有post()、put()、delete()等函数,用来响应不同的HTTP method

回顾一下:本文介绍了Express中的路径管理方式,使用get()、post()、delete()等函数可以响应不同的method。函数的第一个参数是URL,第二个参数是回调函数,该回调函数在当用户用指定的方法访问第一个参数所指定的URL时会被调用。

下次我将介绍一下Express中的“路径参数”,敬请期待。

Friskit

继续阅读此作者的更多文章