[英]api get request on a header.ejs file with node js
我想在header.ejs文件上顯示來自端點的數據,該文件將顯示在所有路由文件中(例如“ /”,“ / news”,“ / dogs”)
這是我的app.js代碼:
// GET API REQUEST
var url = 'https://url.tld/api/';
request(url, function (error, response, body) {
if(!error && response.statusCode == 200) {
var parsedData = JSON.parse(body);
return parsedData;
}
});
app.get("/", function(req, res) {
res.render("index.ejs", {parsedData: parsedData});
});
header.ejs中的代碼:
<li>Active players: <span><%= parsedData["players"] %></span></li>
我收到一個parsedData是未定義的錯誤,我不知道如何以任何方式完成它。 我想在導航欄中顯示活動的播放器和服務器狀態。 實現此目的的常用方法是什么?
提前致謝!
可能您應該使用中間件解決此問題。
從快遞文檔 :
中間件功能是可以訪問請求對象(req),響應對象(res)和應用程序的請求-響應周期中的下一個中間件功能的功能。 下一個中間件功能通常由名為next的變量表示。
中間件功能可以執行以下任務:
- 執行任何代碼。
- 更改請求和響應對象。
- 結束請求-響應周期。
- 調用堆棧中的下一個中間件函數。
中間件始終以請求,響應和功能next
作為參數。 您可以做任何您需要做的事,然后調用next
移至列表中的下一件事。
因此,例如,如果您想編寫一個簡單的中間件,該中間件將記錄應用程序每次收到請求的時間,那么您會說:
app.use(function(req, res, next) {
console.log(Date.now())
next()
})
因此,就您而言,也許您會說:
app.use(function(req, res, next) {
// stuff
request(url, function(err, response, body) {
//stuff
res.locals.parsedData = parsedData
})
})
然后在您的res.render
,您會說
res.render('index.ejs', {parsedData: res.locals.parsedData})
再次從快遞文檔 :
[res.locals是]一個對象,它包含范圍為請求的響應局部變量,因此僅可用於在該請求/響應周期(如果有)中呈現的視圖。 否則,此屬性與app.locals相同。
如果您知道只需要發出一次請求,則將解析的數據附加到app.locals
,然后在中間件中添加檢查以查看app.locals.parsedData
存在,然后再運行請求。
希望這可以幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.