在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ 怎么動(dòng)態(tài)設(shè)置koa的靜態(tài)資源服務(wù)器

怎么動(dòng)態(tài)設(shè)置koa的靜態(tài)資源服務(wù)器

我想根據(jù)客戶端的類型,來請求不同的靜態(tài)文件
比如我移動(dòng)端跟pc端請求的同一個(gè)地址 http://localhost:3000/images/1.jpg 但是返回的圖片是不一樣的

const Koa = require('koa')
const path = require('path')
const static = require('koa-static')
const app = new Koa()

app.use(async (ctx) => {
  const u = ctx.header['user-agent'];
  const isAndroid = u.indexOf('Android') > -1 || u.indexOf('Adr') > -1;
  const isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/);
  if(isAndroid || isiOS) {
    app.use(static(path.join(__dirname, './staticPhone')))
  } else {
    app.use(static(path.join(__dirname, './staticPc')))
  }
})
app.listen(3000)

但是這樣不生效,有辦法動(dòng)態(tài)請求靜態(tài)資源么

回答
編輯回答
怪痞

因?yàn)檫@只是通過設(shè)備類型添加中間件。
判斷設(shè)備類型之后,判斷查看的是否是文件,返回路徑下文件,沒有就404。

2017年4月8日 08:16
編輯回答
孤客

思路錯(cuò)了,app.use實(shí)際上是將預(yù)先定義好的方法串聯(lián)起來為一個(gè)大的方法調(diào)用鏈條,然后根據(jù)請求來處理響應(yīng);
你的邏輯上是動(dòng)態(tài)更改這個(gè)鏈條,不可能;

所以變通一下,通過添加if else邏輯來動(dòng)態(tài)更改參數(shù),而不是方法;

app.use((ctx, next) => {
    if (isMobile) {
        ctx.path = path.resolve(__dirname, 'mobile/static');
    }
    else {
        ctx.path = path.resolve(__dirname, 'normal/static');
    }
    return next();
});

// static middleware
app.use(async()=> {
...
});
2018年2月20日 20:37