koa koa-static 靜態資源中間件


koa-static介紹

在網絡請求中,請求往往分成兩種類型,一種是靜態資源,直接從服務器的文件存儲中讀取,一種是動態資源,一般需要先從數據庫獲取數據,然后經過一定的處理,最后返回給客戶端。

koa-static是靜態資源請求中間件,靜態資源例如html、js、css、jpg、png等等,不涉及其他的處理過程,只是單純的讀取文件,所以單獨抽離出來。原生koa2也可以實現,但是比較麻煩,使用中間件十分方便。

 

 

koa-static的使用

首先我們創建一個簡單的node應用,初始化app.js和一個ejs模板index.ejs

var Koa=require('koa')
var router = require('koa-router')()
var views = require('koa-views')

var app=new Koa();
app.use(views('views',{
  extension:'ejs'
}))

router.get('/',async (ctx)=>{
  await ctx.render('index');
})

app.use(router.routes());
app.use(router.allowedMethods());
app.listen(3000);
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
    <link rel="stylesheet"  href="../static/css/index.css">
</head>
<body>
    <p class="text">這是一個段落</p>
    <img src="../static/images/a.png">
</body>
</html>

項目中有個文件夾static,里面有images和css兩個文件夾,分別存放css樣式文件和圖片這樣的靜態資源

當我們啟動node服務,瀏覽器運行后發現,index.ejs中引入的靜態資源文件找不到,圖片請求404,樣式文件也沒生效

這時候我們要使用koa-static中間件來托管我們的靜態資源,首先安裝koa-static

npm install  koa-static --save

然后再app.js中引入,並且配置這個中間件

var Koa=require('koa')
var router = require('koa-router')()
var views = require('koa-views')
const static = require('koa-static')

var app=new Koa();
app.use(views('views',{
  extension:'ejs'
}))

//配置靜態web服務的中間件
//app.use(static('./static'));
app.use(static(__dirname+'/static')); // __dirname是當前文件夾

router.get('/',async (ctx)=>{
  await ctx.render('index');
})

app.use(router.routes());
app.use(router.allowedMethods());
app.listen(3000);

然后再ejs中不用再../static去查找靜態資源

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
    <link rel="stylesheet"  href="css/index.css">
</head>
<body>
    <p class="text">這是一個段落</p>
    <img src="images/a.png">
</body>
</html>

重啟node服務后,可以看到我們的靜態資源請求回來了

koa-static還可以配置多個靜態資源路勁,項目中再創建一個assert/images,里面放一個b.png,然后再index.ejs中引入這個圖片

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
    <link rel="stylesheet"  href="css/index.css">
</head>
<body>
    <p class="text">這是一個段落</p>
    <img src="images/a.png">
    <img src="images/b.png">
</body>
</html>

並且使用koa-static配置這個路勁

var Koa=require('koa')
var router = require('koa-router')()
var views = require('koa-views')
const static = require('koa-static')

var app=new Koa();
app.use(views('views',{
  extension:'ejs'
}))

//配置靜態web服務的中間件
//app.use(static('./static'));
app.use(static(__dirname+'/static')); // __dirname是當前文件夾
app.use(static(__dirname+'/assert'));   //koa靜態資源中間件可以配置多個

router.get('/',async (ctx)=>{
  await ctx.render('index');
})

app.use(router.routes());
app.use(router.allowedMethods());
app.listen(3000);

重啟服務后,再運行可以看到b.png圖片也請求回來了

 

 

 

koa-static中間件的實現

判斷請求的文件是否存在,如果存在讀取文件返回

如果請求的文件不存在,則默認查看當前文件夾下是否有指定的靜態資源,如果存在返回當前文件夾下的指定的靜態資源

根據上面的思想,所以實現簡單版的static,可以將static單獨存在一個js文件按中,然后require進來,這樣使用和koa一樣:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM