美文网首页
08 - 静态资源的设置

08 - 静态资源的设置

作者: 小草莓蹦蹦跳 | 来源:发表于2017-10-21 23:13 被阅读0次
    1. 当加载一个页面的时候,如果里面有对应的资源文件,会自动发送对应的请求,所以我们需要读取文件对应的文件
    1. 因为路由本身是虚拟的,而且会自动发送请求,所以我们只需要设置对应的读取文件
    1. 一般情况下,自动请求时候的路径的路由就是我们对应的资源文件的名称
    • 127.0.0.1:/css/comQ.cs3000

    • 经过分析 默认请求的路径的 pathname 就是资源文件的路径

    • 所以我们只需要获取对应的pathname

  var pathName = url.parse(req.url).pathname;
    1. 因为一般如果当对应的路由是 / 表示加载index.html(这个步骤不能缺少)
 if(pathName == '/'){
        pathName = '/index.html';
    }
    1. 通过pathname读取对应的文件
      与文件夹拼接构成读取文件的路径
fs.readFile('./static'+pathName,function (err, data) {}
    1. 当有错误的时候,我们加载对应的错误页面(404页面)
if (err){
            /*当有错误的时候,我们加载对应的错误页面*/
            fs.readFile('./static/404.html',function (err, data) {
                res.writeHead(200,{"Content-Type":"html/css;charset=UTF8"});
                res.end(data);
            })
        }
    1. 当读取其他的资源文件的时候,因为有不同的资源,所以我们需要设置不同的响应头。
    • 如果是html就设置text/html

    • css :text/css

    • jpg :image/jpg

    • 解决:根据后缀名来判断对应的响应头

    • 因为通过后缀名获取对应的响应头是一个功能,所以我们可以把这个功能封装成一个函数

    • node.js是包的事件,所以应该先想到会有对应的内置包实现相应的功能。

  • 获取后缀名的方法:

    • 需要导入 path

    • 调用 extname 方法,表示获取对应的传入参数的后缀名

var extName = path.extname(pathName);
  • 封装一个函数用来根据后缀名获取对应的响应头设置
function getExtName(extname) {
    switch (extname){
        case '.html':
            return 'text/html';
            break;
        case '.css':
            return 'text/css';
            break;
        case '.jpg':
            return 'image/jpg';
            break;
    }
}

通过封装的函数获取对应的相应头的对应信息

var mine = getExtName(extName);

案例:获取网页中的静态资源

var http = require('http');
var fs = require('fs');
var url = require('url');
var path = require('path');

var server = http.createServer(function (req, res) {
    // fs.readFile('./static/index.html',function (err, data) {
    //     res.writeHead(200,{'Content-Type':'text/html;charset = UTF8'});
    //     res.end(data);
    // })

    /*当加载一个页面的时候,如果里面有对应的资源文件,会自动发送对应的请求
     * 所以我们需要读取文件对应的文件
     * 因为路由本身是虚拟的,而且会自动发送请求
     * 所以我们只需要设置对应的读取文件
     * 一般情况下,自动请求时候的路径的路由就是我们对应的资源文件的名称
     * 127.0.0.1:/css/comQ.cs3000
     * 经过分析默认请求的路径的pathname就是资源文件的路径
     * 所以我们只需要获取对应的pathname*/

    var pathName = url.parse(req.url).pathname;

    /*因为一般如果当对应的路由是/表示加载index.html(这一步骤不可或缺)*/
    if(pathName == '/'){
        pathName = '/index.html';
    }
    /*获取对应的后缀名
     * extname方法:表示获取对应的传入参数的后缀名*/
    var extName = path.extname(pathName);

    /*通过pathname读取对应的文件*/
    fs.readFile('./static'+pathName,function (err, data) {
        if (err){
            /*当有错误的时候,我们加载对应的错误页面*/
            fs.readFile('./static/404.html',function (err, data) {
                res.writeHead(200,{"Content-Type":"html/css;charset=UTF8"});
                res.end(data);
            })
        }
        else{
            /*读取其他的资源文件
             * 当读取其他的资源文件的时候,因为有不同的资源
             * 所以我们需要设置不同的响应头
             *如果是html就设置text/html
             * css :text/css
             * jpg :image/jpg
             * 解决:根据后缀名来判断对应的响应头
             * 因为通过后缀名获取对应的响应头是一个功能
             * 所以我们可以把这个功能封装成一个函数*/

            var mine = getExtName(extName);

            /*在这种情况下,我们不需要关心文字,所以我们可以不设置编码格式*/
            res.writeHead(200,{'Content-Type':mine});
            res.end(data);
        }
    })

});
server.listen(3000,'127.0.0.1');

/*封装一个函数用来根据后缀名获取对应的响应头设置*/
function getExtName(extname) {
    switch (extname){
        case '.html':
            return 'text/html';
            break;
        case '.css':
            return 'text/css';
            break;
        case '.jpg':
            return 'image/jpg';
            break;
    }
}

相关文章

网友评论

      本文标题:08 - 静态资源的设置

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