美文网首页
Node.js 的 http 模块

Node.js 的 http 模块

作者: 张金宇 | 来源:发表于2016-09-13 23:40 被阅读0次

    实验简介

    http模块主要用于创建http server服务,此次实验还会讲到url模块和path模块,同时也会用到前面讲过的fs模块。url模块用于解析url,path模块用于处理和转换文件路径。

     通过前面的实验,相信大家对Node.js模块的使用已经比较熟悉。在这个实验中,我们就通过编写一个简单的http server来学习http模块。
    

    一、创建http server

    通过Node.js创建http server非常简单,示例代码如下:
    <pre>
    / 引入http模块
    var http = require('http');
    // 创建http server
    http.createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('Hello World\n');
    }).listen(1337, '127.0.0.1');
    console.log('Server running at http://127.0.0.1:1337/');
    </pre>
    运行此文件:<pre>$ node demo.js</pre>
    然后打开虚拟机浏览器,访问http://127.0.0.1:1337/,
    就会看到页面上显示了Hello World,说明我们的http server创建成功了。

    当然,我们在这个实验要做的比这个稍微复杂一点。
    在这个实验中,我们会创建一个简单的http server,所有的代码都放在app这个文件夹中。首先,新建一个文app件夹,在文件夹中新建server.js
    文件,输入如下代码(其中的注释为代码解释):

    <pre>
    // 创建http server
    //
    // 加载所需模块
    var http = require('http');
    var url = require('url');
    var fs = require('fs');
    // 设置ip和端口
    // 实际应用中,可以把这些写到配置文件中
    var host = '127.0.0.1',
    port = 8080;
    // 创建http server
    function start(route, handle) {
    // 参数
    // route 判断url是否存在,存在则调用handle处理,不存在则返回404
    // handle 处理不同的url请求
    // 处理request请求
    function onRequest(req, res) {
    // 使用url.parse()方法解析url
    // 它会把url string转化为一个object
    // 这样我们就可以很方便的获取url中的host、port、pathname等值了
    var pathname = url.parse(req.url).pathname;
    console.log('Request for ' + pathname + ' received.');
    // 判断并处理不同url请求
    // 后面介绍此方法
    route(handle, pathname, res, req);
    }
    // 使用http.createSserver()方法创建http server
    // 并传入onRequest()方法
    // 然后使用listen()方法监听指定地址
    http.createServer(onRequest).listen(port, host);
    console.log('Server has started and listening on ' + host + ':' + port);
    }
    // 导出 start 方法
    exports.start = start;
    </pre>
    在文件的最后,我们导出了start方法,以便在主程序中使用。你肯定注意到了,在代码中使用了route()方法,它用于处理判断请求的url是否存在,现在我们就来编写这个方法。

    二、创建路由

    在app文件夹中新建router.js,输入如下代码:
    <pre>
    var fs = require('fs');
    // 路由函数
    // 处理不同url的请求
    // 并返回相应内容
    function route(handle, pathname, res, req) {
    console.log('About to route a request for ' + pathname);
    // 判断此url是否存在特定处理函数
    // 存在则调用handle处理
    // 不存在则返回404页面
    if (typeof handle[pathname] === 'function') {
    // 后面介绍handle函数
    handle[pathname](res, req);
    } else {
    console.log('No request handler found for ' + pathname);
    // 读取404页面
    // 所有页面都存放在view文件夹下
    var content = fs.readFileSync('./views/404.html');
    res.writeHead(404, { 'Content-Type': 'text/html' });
    res.write(content);
    res.end();
    }
    }
    // 导出 route 方法
    exports.route = route;
    </pre>
    在此方法中,调用了handle()方法,这个方法用于处理不同的url请求。
    在app文件夹中新建requestHandlers.js文件,输入如下代码:
    <pre>
    // 处理url请求
    var fs = require('fs');
    // home.html 主页
    function home(res) {
    console.log('Request handler "home" was called.');
    // 读取home.html文件
    var content = fs.readFileSync('./views/home.html');
    res.writeHead(200, { 'Content-Type': 'text/html' });
    res.write(content);
    res.end();
    }
    // about.html 关于页面
    function about(res) {
    console.log('Request handler "about" was called.');
    // 读取about.html文件
    var content = fs.readFileSync('./views/about.html');
    res.write(200, { 'Content-Type': 'text/html' });
    res.write(content);
    res.end();
    }
    // 导出页面处理函数
    exports.home = home;
    exports.about = about;
    </pre>
    这个方法比较简单,就是读取文件,然后输出到response。

    三、创建主程序

    创建http server,判断url,处理url都写完了,那么我们可以写主程序来运行http server了,在app文件夹新建main.js文件,输入如下代码:
    <pre>
    // 主程序
    // 引入server,router及requestHandler
    var server = require('./server');
    var router = require('./router');
    var requestHandlers = require('./requestHandlers');
    // 保存url处理方法
    var handle = {};
    handle['/'] = requestHandlers.home;
    handle['/about'] = requestHandlers.about;
    // 启动http server
    server.start(router.route, handle);
    </pre>
    到此,所有的服务器代码都写完了,那么我们来添加代码中用到的两个html文件吧。

    四、创建HTML文件

    在app文件夹中新建views文件夹,在views文件夹中,新建home.html文件、about.html文件和404.html文件。
    文件中的代码如下所示:
    home.html文件:
    <pre>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>Home page</title>
    </head>
    <body>
    <p>home page</p>
    </body>
    </html>
    </pre>
    about.html文件:

    <!DOCTYPE html>
    <pre>
    <html>
    <head>
    <meta charset="utf-8">
    <title>About page</title>
    </head>
    <body>
    <p>about page</p>
    </body>
    </html>
    </pre>
    404.html文件:
    <pre>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>404 page</title>
    </head>
    <body>
    <p>404 page not found</p>
    </body>
    </html>
    </pre>
    HTML文件的代码写得比较简单,可自由发挥。

    那么现在我们来运行程序吧:
    <pre>$ node main.js</pre>
    运行成功后,打开虚拟机桌面的浏览器,
    访问“http://127.0.0.1:8080” ==>就会看到页面显示“home page”,
    访问“http://127.0.0.1:8080/about” ==>就会看到页面显示“about page”,
    访问http://127.0.0.1:8080 ==>下的其他页面就会看到页面显示404 page not found。

    相关文章

      网友评论

          本文标题:Node.js 的 http 模块

          本文链接:https://www.haomeiwen.com/subject/iigmettx.html