2015-12-24 70 views
1

我在node.js中構建應用程序。從快遞中間件訪問數據

我編寫了一箇中間件函數鉤子,當有人在我的應用上發出GET請求時,就執行這個鉤子,就像他們進入主頁,配置文件頁面等一樣。鉤子使得來自另一個API的HTTP請求收集數據。

我的問題是如何訪問客戶端的數據?這裏是我的中間件鉤:

var request = require('request'); 

module.exports = { 
    authentication: function (req, res, next) { 
     if (req.method === 'GET') { 
     console.log('This is a GET request'); 
     request("http://localhost:3000/api/employee", function(err, res, body) { 
      console.log(res.body); 
     }); 
     } 
     next(); 
    } 
}; 

它在我的所有途徑中使用:

app.use(middleware.authentication)

樣品路線:

router.get('/', function(req, res, next) { 
    res.render('../views/home'); 
}); 

通知我用console.log(res.body),但我要打印在CLIENT端的內容。有沒有人有任何想法如何做到這一點?

+0

你是如何渲染路線的?是數據返回簡單的HTML你想結合在最終的HTML? – MoLow

+1

嗨 - 我更新了我的問題以顯示示例路線。返回的數據是簡單的HTML –

+0

你可以添加一個視圖,並在註釋中標記你想要根目錄中的html嗎? – MoLow

回答

4

您可以在reqres對象中設置自定義變量。就像下面的代碼一樣,它將被存儲在req.my_data上。稍後在您的路線中,您可以再次從req中檢索它。

而且,您需要在獲得數據後致電next(),否則在您從request獲取數據之前代碼會繼續。

var request = require('request'); 

module.exports = { 
    authentication: function (req, res, next) { 
     if (req.method === 'GET') { 
     console.log('This is a GET request'); 
     request("http://localhost:3000/api/employee", function(err, request_res, body) { 
      req.my_data = request_res.body; 
      next(); 
     }); 
     } 

    } 
}; 

而在您的路線中,通過將數據傳遞給模板引擎,您可以訪問客戶端。根據您的模板引擎(ejsjade等),語法會有所不同。

router.get('/', function(req, res, next) { 
    res.render('../views/home', {data: req.my_data}); 
});