2017-05-24 12 views
0

ルートに基づいてスタティックパスを変更したいと思います。例えば、(動作しない):ルートに基づいて高速静的パスを変更するにはどうすればよいですか?

const app = express(); 
const appRouter = express.Router(); 
const adminRouter = express.Router(); 

appRouter.use(express.static('/path/to/app/static/assets'); 
adminRouter.use(express.static('/path/to/admin/static/assets'); 

app.use('/', appRouter); 
app.use('/admin', adminRouter); 

また、これは動作しません:

const app = express(); 

app.use('/', express.static('/path/to/app/static/assets'); 
app.use('/admin', express.static('/path/to/admin/static/assets'); 

私は何をしたくないんするアプリケーション全体の静的として両方のパスを設定されている:

// the following will expose both paths as static for the entire app 
// this does not accomplish what I am trying to do 

const app = express(); 

app.use(express.static('/path/to/app/static/assets'); 
app.use(express.static('/path/to/admin/static/assets'); 

これは可能ですか?

答えて

0

私は、Tolseeによって投稿されたgitの問題の解決策を考え出すことができました。 I published itからnpmまではexpress-dynamic-staticの名前である。ここで

はそれを使用する方法の簡単な例です:

const express = require('express'); 
const dynamicStatic = require('express-dynamic-static')(); // immediate initialization 
const path = require('path'); 

const app = express(); 
app.use(dynamicStatic); 

app.get('/', (req, res) => { 
    dynamicStatic.setPath(path.resolve(__dirname, 'path/to/app/assets')); 

    // res.render... 
} 


app.get('/admin', (req, res) => { 
    dynamicStatic.setPath(path.resolve(__dirname, 'path/to/admin/assets')); 

    // res.render... 
} 
1

Express静的ミドルウェアでは考えられません。

1

達成しようとしていることは、express.static()でのアプローチでは実現できません。あなたの#2アプローチは、express.static関数によって提供されるファイルの仮想パス接頭辞(ファイルシステムに実際には存在しないパス)を作成します。詳細はthisに従ってください。

しかし実行可能なのは、実行時にexpress.static()のパスを変更することです。 this git issueをフォローしてください。それが役に立てば幸い。

関連する問題