首页 > 语言 > JavaScript > 正文

Node.js创建HTTP文件服务器的使用示例

2024-05-06 15:34:23
字体:
来源:转载
供稿:网友

HelloWorld示例只有演示意义,这次我们来搞一个实际的例子:文件服务器。我们使用Node.js创建一个HTTP协议的文件服务器,你可以使用浏览器或其它下载工具到文件服务器上下载文件。

为了读取文件,我们会用到File System模块(名字是”fs”),Stream,我们还要分析URL,区别HTTP方法,还会用到EventEmitter。

文件服务器FileServer的代码

先上代码吧,依然是简单的:

// 引入http模块var http = require("http"); var fs = require("fs");// 创建server,指定处理客户端请求的函数http.createServer(  function(request, response) {    //判断HTTP方法,只处理GET     if(request.method != "GET"){      response.writeHead(403);      response.end();      return null;    }    //此处也可使用URL模块来分析URL(https://nodejs.org/api/url.html)    var sep = request.url.indexOf('?');    var filePath = sep < 0 ? request.url : request.url.slice(0, sep);    console.log("GET file: " + filePath);    //当文件存在时发送数据给客户端,否则404    var fileStat = fs.stat("."+filePath,       function(err, stats){        if(err) {          response.writeHead(404);          response.end();          return null;        }        //TODO:Content-Type应该根据文件类型设置        response.writeHead(200, {"Content-Type": "text/plain", "Content-Length": stats.size});        //使用Stream        var stream = fs.createReadStream("."+filePath);        stream.on('data',function(chunk){          response.write(chunk);        });        stream.on('end',function(){          response.end();        });        stream.on('error',function(){          response.end();        });      }    );  }).listen(8000); console.log("Hello World start listen on port 8000");

最大的变化,就在传递给createServer方法的参数了。

我们根据request.method作了判断,不是GET就返回403。如果是呢,就判断文件是否存在,不存在,返回404,存在就读取数据写给客户端。逻辑就是这么简单。下面我们来介绍用到的新知识。

File System

要使用FileSystem,得用require引入fs模块,就如前面代码里那样。File System的API老长老长了,看这里吧:https://nodejs.org/api/fs.html。我们只说用到的特性。

获取文件状态

在我们的FileServer里,收到和客户端请求时先通过fs.stat()方法获取文件状态。fs.stat()方法原型如下:

fs.stat(path, callback)

第一个参数是文件路径,第二个参数是回调函数。fs.stat()方法是异步的,结果通过回调函数callback返回。callback的原型如下:

function(err, stats)

第一个参数指示是否出现了错误,第二个参数是一个对象,类型是fs.Stats,保存了文件的状态信息,比如大小、创建时间、修改时间等。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选