美文网首页
2019-05-14 Node.js简单的静态服务器

2019-05-14 Node.js简单的静态服务器

作者: Ztry | 来源:发表于2019-05-14 12:05 被阅读0次

    前言

    1. 近期在学习Node.js一些基础知识,想通过一些demo和一些实战性的东西加强一下,顺便加快前端开发效率问题;
    2. 从一个简单的静态服务器开始

    简单的静态服务器接口

    开始

    1. Node.js的基础模块:http、url、path、fs
    2. MIME的了解
    3. 开撸
      // 参考以上链接的demo,发现一些小错误,通过查找Node.js的文档修改了一下代码
    var http = require("http"),
        url = require("url"),
        path = require("path"),
        fs = require("fs");
    var server = http
        .createServer(function(req, res) {
            // res.setHeader('Content','keep-alive');
            // res.setHeader('Expires','Mon, 31 Dec 2012 23:59:59 GMT');
            //res.setHeader('Cache-Control', 'max-age=31536000');
            var pathname = path.join(__dirname,url.parse(req.url).pathname); // 获取访问路径url的目录路径部分
            if (path.extname(pathname) == "") { //path.extname() 拿出拓展名
                pathname += "/";
            }
            if (pathname.charAt(pathname.length - 1) == "/") {
                pathname += "index.html";
            }
    
            // fs.exists(pathname, function(exists) {  //fs.exists已经废弃, 改用fs.access(path[,mode],callback), 但是后边有读写操作不推荐用fs.access, 改用fs.readFile
            // console.log(pathname)
            fs.readFile(pathname,function(err,data){
                if(err){
                    console.error(err)
                    res.writeHead(404, { "Content-Type": "text/html" });
                    res.end("<h1>404 Not Found</h1>");
                }else{
                    var type = {
                        ".html": "text/html",
                        ".htm": "text/html",
                        ".js": "application/javascript",
                        ".css": "text/css",
                        ".ico": "image/x-icon",
                        ".jpeg": "image/jpeg",
                        ".jpg": "image/jpeg",
                        ".png": "image/png",
                        ".gif": "image/gif",
                        ".xml": "text/xml",
                        ".json": "application/json",
                        ".txt": "text/plain",
                        ".pdf": "application/pdf",
                        ".swf": "application/x-shockwave-flash",
                        ".woff": "application/font-woff",
                        ".ttf": "application/octet-stream",
                    };
                    if(type[path.extname(pathname)]){
                        res.writeHead(200, {
                            "Content-Type": type[path.extname(pathname)]
                        });
                    }
                    res.end(data);
                }
            });
        })
        .listen(3001);
    
    console.log("Server is running at http://127.0.0.1:3001/");
    
    

    Node.js 中文网 v10.15.3 - fs.exists

    过程(遇到的问题)

    1. 开篇的CNode里面的简单的静态服务器接口有一处错误,path没有exist这方法,另外很多fs的接口已经废弃了,我只好重新阅读文档修改;
    2. 我搭建这个主要是用来测试ElementUI一些demo学习使用的,发现跑了一个ElementDemo(直接引入),在加载woff和tff文件时存在问题,后来在目录里面放了woff和tff文件,并且加上对应的MIME,然后发现对tff的ContentType有很多不同的表述,就对type[path.extname(pathname)]进行个判断,如果文件存在但是找不到对应的ContentType,不影响文件的读取,只是响应头没有ContentType

    总结

    1. 对Node.js的API还不过熟悉,要加强,同时在对ElementUI的一些demo进行学习的时候,把Node.js一些文件读写上传的学习一下。

    相关文章

      网友评论

          本文标题:2019-05-14 Node.js简单的静态服务器

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