美文网首页
Node.js 开发入门(3)-static

Node.js 开发入门(3)-static

作者: 明月钓无痕 | 来源:发表于2017-03-17 15:36 被阅读39次

    1. 静态资源文件是做什么的

    和 PHP 等后台语言不同,在 Node 中,我们请求的路径并非对应真实的文件夹,而是通过路由进行操作到指定的文件夹.
    在开发中,一些网页,及图片等资源,会放到静态文件资源区.但是 Node 默认是没有的.

    2. 如何建立静态资源文件区

    这里用到的模块

    var http = require("http");
    var url = require("url"); // 处理 url
    var fs = require("fs"); // 文件操作
    var path = require("path"); // 处理路径
    

    创建 HTTP 服务器

    http.createServer((request, response) => {
        // 得到用户的路径 端口号后面的路径
        let pathName = url.parse(request.url).pathname;
        if(pathName == '/') {
            pathName = "index.html";
        }
        // 获取扩展名
        let extName = path.extname(pathName);
        fs.readFile('./static/' + pathName, (error, data) => {
            if (error) {
                // 文件不存在 返回404
                fs.readFile('./static/404.html', (error, data) => {
                    response.writeHead(404, {"Content-Type": "text/html;charset=UTF8"});
                    response.end(data);
                });
                return;
            }
            // 获取MIME 类型
            getMime(extName, (error, mime) => {
                console.log(mime);
            response.writeHead(200, {"Content-type":mime});
            response.end(data);
            });
        });
    }).listen(3000, "172.20.35.60");
    
    

    简单的获取 MIME 类型

    function getMime(extname){
        switch(extname){
            case ".html" :
                return "text/html";
                break;
            case ".jpg" : 
                return "image/jpg";
                break;
            case ".css":
                return "text/css";
                break;
        }
    }
    

    3. url 模块介绍

    url模块是对 URL 进行解析的.我们常用到的
    例如如下的
    url'http://user:pass@host.com:8080/p/a/t/h?query=string#hash'
    pathname 表示URL的路径部分,自主机和查询之前,包括初始斜杠,不进行解码. /p/a/t/h
    search 表示 URL 的参数部分. ?query=string
    path 包括 pathname 和 search部分
    port 端口号 8080
    protocol 协议名 http:

    4.Path 模块

    对于处理 url 我们会配合 Path 模块,这样方便处理文件,扩展名等等信息
    path.basename(p[, ext])返回路径的最后一部分

    path.basename('/foo/bar/baz/asdf/quux.html')
    // returns 'quux.html'
    
    path.basename('/foo/bar/baz/asdf/quux.html', '.html')
    // returns 'quux'
    

    path.dirname(p)返回目录的路径

    path.dirname('/foo/bar/baz/asdf/quux')
    // returns '/foo/bar/baz/asdf'
    

    path.extname(p)返回扩展名

    path.extname('index.html')
    // returns '.html'
    
    path.extname('index.coffee.md')
    // returns '.md'
    
    path.extname('index.')
    // returns '.'
    
    path.extname('index')
    // returns ''
    
    path.extname('.index')
    // returns ''
    

    path.join([path1][, path2][, ...])合并两个路径

    path.normalize(p)路径规范化.

    path.parse(pathString) 将字符串转化为一个路径对象

    path.parse('/home/user/dir/file.txt')
    // returns
    // {
    //    root : "/",
    //    dir : "/home/user/dir",
    //    base : "file.txt",
    //    ext : ".txt",
    //    name : "file"
    // }
    

    相关文章

      网友评论

          本文标题:Node.js 开发入门(3)-static

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