Node.js实现简易版基于http的文件服务器

Node.js实现简易版基于http的文件服务器_第1张图片

代码

var http = require("http");
var url = require("url");
var path =  require("path");
var mime = require("mime");
var fs = require("fs");
var urlencode = require('urlencode');

http.createServer(function(req, res){
    var pathname = url.parse(req.url).pathname;
    pathname = urlencode.decode(pathname, 'utf-8');
    if(pathname == "/favicon.ico") return;
    finalpath = __dirname + pathname;

    fs.exists(finalpath,function(exists){
        if(exists){
            if(fs.statSync(finalpath).isDirectory()){
                fs.readdir(finalpath,function(err,files){
                    if(err){
                        res.writeHead(200,{"Content-Type":'text/plain'});
                        res.end("

404 page cannot be found

"
); } else{ var html = ""; var files = fs.readdirSync(finalpath); for (var i in files) { var filename = files[i]; html += ""; } res.writeHead(200, {'content-type': 'text/html'}); res.end(html); } }) } else if(fs.statSync(finalpath).isFile()){ fs.readFile(finalpath,function(err,data){ if(err) {res.end("cannot read file!");} else { res.writeHead(200,{"Content-Type":mime.getType(path.basename)}); res.end(data); } }) } else{ res.writeHead(200,{"Content-Type":"text/html;charset=utf-8"}); res.end("

404 page cannot be found!

"
); } } }) }).listen(8088);

截图

Node.js实现简易版基于http的文件服务器_第2张图片 Node.js实现简易版基于http的文件服务器_第3张图片 Node.js实现简易版基于http的文件服务器_第4张图片 Node.js实现简易版基于http的文件服务器_第5张图片

总结

虽然这个实验比较简单,但是还是查了好多资料,debug了好久,总结总结:

  1. 认识了版本管理工具nvm和包管理工具npm(对应python的pip)
  2. 服务器是个进程,创建了一个服务器后它会一直监听一个端口,等待请求,在收到url请求后会根据服务器程序逻辑处理参数、路径等信息相应的返回请求的资源(本程序返回的是html或一些文件的显示或下载)服务器是个进程,创建了一个服务器后它会一直监听一个端口,等待请求,在收到url请求后会根据服务器程序逻辑处理参数、路径等信息相应的返回请求的资源(本程序返回的是html或一些文件的显示或下载)
  3. 异步可以理解为事件触发,同步则是顺序执行
  4. JavaScript导模块的形式和python的import…as很类似,都会给模块取名
  5. 理解服务当前所在地址、路径名和绝对路径的区别
  6. 注意解析客服端请求的url并将其转换成资源管理器上的路径时要先对url进行解码
  7. 体会到了console.log对于调试的巨大作用
html += "

这段代码实现了程序的核心功能,一定要注意超链接跳转是对于客户来说的,客户端完成click事件后相当于向服务器发送了一个请求,所以链接应当是一个url(: 前面一直写成本地的资源管理器路径怎么点超链接都没有反应,查了好久才反应过来,被自己菜哭

参考资料

(1)get start
Node.js-Webstorm2018配置nodejs
(2)mime
【Node.js基础篇】(五)使用mime模块来响应css、js文件的请求
nodejs-mime类型
(3)fs
NodeJS遍历文件生产文件列表
搭建nodejs服务,访问本地站点文件
(4)url
NodeJS解析url参数
node 中,url.parse(req.url).pathname 和 req.url 的区别
(5)urlencode
Nodejs urlencode模块url加密解密
(6)实例
如何使用nodejs 服务器读取HTML文件渲染至前端
node静态资源服务器的搭建----访问本地文件夹(搭建可访问静态文件的服务器)

你可能感兴趣的:(web程序设计,nodejs)