簡體   English   中英

Express.js 試圖用變量設置 express.static

[英]Express.js trying to set express.static with variables

我的模板設置因我使用的子域而異。 因此,我試圖找到一種根據我使用的子域名動態設置 express.static 的方法。

當 app.use 運行時,模板未定義。 如果我在 app.get 中運行 app.use,它超出了范圍。 如果我嘗試從一個函數運行 app.use 它也超出了范圍。

“模板”是我在 app.get 中獲得的一個變量,它是我的子域和 http 請求

app.use('/subdomain/:domain/bower',express.static(path.join(__dirname, '/public/' + **template** + '/bower')));

app.get('/subdomain/:domain',function(req,res,next) {    

        get('/stores/template/' + req.params.domain)
        .then(function(body){
          console.log("template: " + body.toString());
            template = body;                
            res.render('store',{store:req.params.domain});  
        });

});

我很確定它與范圍有關,但到目前為止我還沒有解決它。 任何幫助,將不勝感激

您的第一個app.use()和其中的express.static()調用在您的服務器首次啟動時運行。 此時, template變量還沒有值。 你不能真正按照你想要的方式做事。

app.get()也會立即運行,但直到將來某個時間匹配該路由的 http 請求實際到達時才會調用其回調。 到那時,當template變量被分配時,它在您之前的app.use()語句中變得有用為時已晚。

如果您的服務器在最初從配置文件或類似文件中設置時可以知道它正在服務哪個子域,那么這將容易得多。 如果您打算讓同一台服務器同時為多個子域提供服務,並且希望它基於子域提供不同的文件,那么您將不得不以完全不同的方式進行編碼,因為您不能只使用像express.static()這樣的普通路由匹配express.static()是因為您真正想要的是子域 + 路由匹配,這不是我所知道的內置功能。

我想如果我試圖解決這個問題,我會讓我的第一個中間件檢查請求的子域並將其插入到 URL 的前面,為每個子域創建一個唯一的偽 URL。 然后,您可以在該偽 URL 上進行正常路由,這就是中間件和路由的其余部分將視為請求 URL 的內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM