簡體   English   中英

api在帶有節點js的header.ejs文件上獲取請求

[英]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.

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