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

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"
// }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 个人入门学习用笔记、不过多作为参考依据。如有错误欢迎斧正 目录 简书好像不支持锚点、复制搜索(反正也是写给我自己看...
    kirito_song阅读 2,505评论 1 37
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,991评论 19 139
  • Node.js是目前非常火热的技术,但是它的诞生经历却很奇特。 众所周知,在Netscape设计出JavaScri...
    w_zhuan阅读 3,642评论 2 41
  • https://nodejs.org/api/documentation.html 工具模块 Assert 测试 ...
    KeKeMars阅读 6,414评论 0 6
  • Node.js Stream(流) Stream 是一个抽象接口,Node 中有很多对象实现了这个接口。例如,对h...
    FTOLsXD阅读 618评论 0 2