• koa中静态文件资源中间件实现


    项目实践过程中,会使用非常多的静态资源,怎样可以直接在浏览器中访问到这些静态资源

      • const fs = require('fs');
        const path = require('path');
        
        module.exports = (dirpath = "./public") => {
            return async (ctx, next) => {
                if (ctx.url.indexOf("/public") === 0) {
                    //public 开头 读取文件
                    const url = path.resolve(__dirname, dirpath);
                    // path.basename(p, [ext])
                    // 提取出用‘/’隔开的path的最后一部分,ext是过滤字符
                    // path.basename('/foo/bar/baz/asdf/quux.html', '.html') 
                    // returns 
                    // 'quux'
                    const fileBaseName = path.basename(url); // public
                    const filepath = url + ctx.url.replace("/public", "");   //得到文件目录
                    console.log(filepath);
                  
                    try {
                        //判断是否是一个文件夹
                        stats = fs.statSync(filepath);
                        if (stats.isDirectory()) {
                            const dir = fs.readdirSync(filepath);
                            console.log(dir);  // [ 'index.html', 'style.css' ]
                            
                            const ret = ['<div style="padding-left">'];
                            dir.forEach(filename => {
                                console.log(filename);
                                //不带小数点的格式,就是文件夹
                                if (filename.indexOf(".") > -1) {
                                    ret.push(
                                        `<p><a style="color:black" href="${ctx.url}/${filename}">${filename}</a></p>`)
                                } else {
                                    //文件
                                    ret.push(`<p><a href="${ctx.url}/${filename}">${filename}</a></p>`)
                                }
        
                            });
                            ret.push("</div>")
                            ctx.body = ret.join("");
                        } else {
             //访问到的是一个文件,则直接读取内容 console.log(
        '文件'); const content = fs.readFileSync(filepath); ctx.body = content; } } catch (error) { ctx.body = "404 ,not found"; console.log(error); } } else { //否则不是静态资源,直接去下一个中间件 await next(); } } }

        同时在我们的app文件中添加中间件的引用

      • const static = require('./static');
        app.use(static('./public'));

        便可以在浏览器中使用public目录来访问文件了

  • 相关阅读:
    poj2778 DNA Sequence(AC自动机+矩阵快速幂)
    poj2001 Shortest Prefixes (trie树)
    hdu5536 Chip Factory
    解决 苹果手机点击输入框页面自动放大111
    css 记录
    对复选框自定义样式 优化方法
    css引入外部字体
    jquery获取当前页面的URL信息
    左侧导行伸缩控制
    表单提交同类数据的做成数组
  • 原文地址:https://www.cnblogs.com/yinping/p/10722897.html
Copyright © 2020-2023  润新知