服务器返回主页功能

下面我们编写一个单独的html文件,当有请求时,会把它作为响应数据。

首先,创建 day01/public文件夹,然后在public文件夹内创建一个index.html网页文档。

下面编写一段html

<!doctype html>
<html>
    <head>
        <meta charset="utf-8"/>
        <title>node.js 你好</title>
    </head>
    <body>
        <hr>
        <b><i>node.js 你好!javascript 你好!</i></b>
        <hr>
    </body>
</html>

静态html文档有了,如何让服务器读取呢? 这就需要用到另一个模块,File System 模块。通过var fs = require("fs")可以得到该模块对象。

通过 fs.readFilefs.readFileSync 方法可以读取文件内容,两者的区别是一个是异步的,一个是同步的。异步就是底层的读取数据操作和主程序是两个进程,也就是说不会阻塞,而同步正好相反。下面我们修改handle函数让他读取到index.html文档的内容,会采用异步和同步两种方式实现,功能效果是一致的。

把 httpServer.js文件拷贝一份叫httpServer2.js,我们将扩展httpServer.js程序的功能。


handle函数添加读取主页功能

同步实现方法
var fs = require("fs");   // 得到File System模块对象
function handle(request,response){
       var data = fs.readFileSync(__dirname+"/public/index.html");  // 读完文档数据并返回后,程序才能继续。
       response.write(data);
       response.end();
}
异步实现方法
var fs = require("fs");   // 得到File System模块对象
function handle(request,response){
       // 回调函数,当底层得到文档后,会调用该函数。
       function callback(err,data){
             response.write(data);
             response.end();       
       }
       // 异步方式不会阻塞主程序进程
       fs.readFile(__dirname+"/public/index.html",callback);  

}

一般在node.js实际开发中都采用异步方式,因为node.js的优势就在于非阻塞I/O异步,这样性能会很高。

浏览器访问效果

下一节,通过对程序进一步扩展,指定静态服务器目录,让客户端可以访问该目录内的所有文件。