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

2017-03-17  本文已影响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"
// }
上一篇下一篇

猜你喜欢

热点阅读