2016-04-19 44 views
1

使用nodejs/expressjs爲我的Web應用程序構建API,我想將一些變量發送到所有API,例如站點標題和說明等。將變量發送到exressjs中的所有路由

我偶然發現了不再使用的dynamicHelper()舊解決方案。這樣做的新方法是什麼?

+0

這個問題根本沒有足夠的細節讓我們回答。 「將一些變量發送給所有API」是什麼意思?您的服務器中的每條路線是API還是一些路線,而不是API?你用什麼代碼來構建你的API響應?你是否正在返回JSON?你的API響應是什麼樣的?您能否向我們展示典型API響應的代碼,並向我們展示添加了特殊變量的實際響應?你想添加什麼類型的變量? – jfriend00

回答

2

最簡單的事情就是放入一些中間件,將它作爲當地人附加到響應對象上(這些中間件會自動顯示在視圖中)。喜歡的東西:

app.use(function(req,res,next) { 
    res.locals = { 
    title : 'your title', 
    description : 'your description' 
    }; 
    return next(); 
}); 

**編輯佔到什麼API端點必須做 由於每個端點是自己的對象可能負責,你也這樣做:

app.get('/whatever', function(req,res){ 
    var json = {}; 
    // do whatever to build your json 
    json.metadata = res.locals; // or whatever the common stuff is 
    res.send(json); 
} 

這將所有'常見'內容保留在json響應的一部分中。

+0

我在前端使用的是angularjs,expressjs應用只適用於API。因此在express中不使用視圖引擎。 –

+0

@JoshuaLeung - 如果你有更多的要求,比如你剛剛提到的,那麼把這些細節放到你的問題中。你的問題缺乏足夠的細節讓任何人知道如何正確回答。 – jfriend00

+0

但我已經說過「使用nodejs/expressjs爲我的web應用程序構建API」作爲段落中的第一件事...... –

-1

您應該在您的前端(角度js)嘗試interceptors以發送多個變量與每個請求api。

在下面的代碼中,我在標題中發送標題和描述。

module.factory('varInfoInterceptors', function($q) { 
    var sendInfoInjector = { 
     request: function(config) { 
       config.headers['x-headers-title'] = 'Test title'; 
       config.headers['x-headers-desc'] = 'This is test site'; 
      return config; 
     } 
    }; 
    return sendInfoInjector; 
}); 
module.config(['$httpProvider', function($httpProvider) { 
    $httpProvider.interceptors.push('varInfoInterceptors'); 
}]); 

您可以通過只調用req.headersexpress路線

由於獲得服務器端(的NodeJS/expressjs)這些值,

迪內希

1

既然你提到你在expressjs中不使用任何視圖引擎,我假設你只是依靠angularJS來做客戶端重寫。您可以將這些服務器端數據傳遞給http頭,然後從客戶端讀取它們。要做到這一點,在你的路由器,你可以做到這一點,

app.use(function(req,res,next) { 
    res.set({ 
     'title': 'my title', 
     'description': '123' 
    }); 
    next(); 
}); 

然後在你的angularJS的應用程序,你可以從HTTP頭讀取。