• 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目录来访问文件了

  • 相关阅读:
    批量管理服务器,批量分发文件
    IIS最大连接数优化
    在CentOS 7中安装与配置JDK8
    可扩展流程设计工具方案
    An internal erroroccurred during: "Removing compiler problem markers...".java.lang.String
    .NET和java之争实没必要
    提高生产率的VS插件
    Java Synchronized关键字
    Flex拖动实现方法
    WF3.0和4.0区别介绍
  • 原文地址:https://www.cnblogs.com/yinping/p/10722897.html
Copyright © 2020-2023  润新知