koa中靜態文件資源中間件實現

項目實踐過程當中,會使用很是多的靜態資源,怎樣能夠直接在瀏覽器中訪問到這些靜態資源javascript

    • 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文件中添加中間件的引用css

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

      即可以在瀏覽器中使用public目錄來訪問文件了html

相關文章
相關標籤/搜索