2015-12-24 28 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}); 
});