【问题标题】:Access data from express middleware从快速中间件访问数据
【发布时间】:2015-12-24 15:39:59
【问题描述】:

我正在 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),但我想在客户端打印它的内容。有谁知道如何做到这一点?

【问题讨论】:

  • 如何渲染路线?返回的数据是不是你想在最终的html中合并的简单html?
  • 嗨 - 我更新了我的问题以显示示例路线。返回的数据是简单的 HTML
  • 您能否添加一个视图并用注释标记您希望根目录中的 html 的位置?

标签: javascript node.js express middleware


【解决方案1】:

您可以在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});
});

【讨论】:

    猜你喜欢
    • 2020-07-22
    • 1970-01-01
    • 2021-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多