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

2019-05-14  本文已影响0人  Ztry

前言

  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一些文件读写上传的学习一下。
上一篇下一篇

猜你喜欢

热点阅读