最近一直在学习Node,也一直在尝试着利用Node来实现一些有趣的东西,以下是自己撸的一个文件服务器的程序。
'use strict';
var fs = require('fs'),
url = require('url'),
path = require('path'),
http = require('http');
//从命令行参数获取文件根路径,默认为当前目录
var root = path.resolve(process.argv[2] || '.');
var server = http.createServer((req,res)=>{
//获取url的path
var pathName = url.parse(req.url).pathname;
//构造文件路径
var filePath = path.join(root,pathName);
fs.stat(filePath,(err,stat)=>{
if(!err&&stat.isFile()){
res.writeHead(200);
fs.createReadStream(filePath).pipe(res);
}else{
res.writeHead(404);
res.end('404 not found');
}
});
}).listen(3000);
console.log("server is running at http://127.0.0.1:3000");
程序非常简单,但也涵盖了一些知识点。不过有些小伙伴可能疑惑于process.argv[2]以及pipe。
关于process.argv[2],我们不妨在一个js模块中写上:
console.log(process.argv[2]);
然后运行命令行+自定义参数:
node fs_server.js haha //haha
相信到这里大家都懂了,程序里只是为文件根路径提供了一个命令行自定义参数而已。
而关于pipe,实际上 fs.createReadStream(filePath)的时候我们创建了一个文件流,因此我们可以很轻而易举的通过pipe()读取文件内容并传送到http响应中。