将 var 从服务器传递到客户端

Passing a var from server to client

我正在使用 node.js + Express + EJS。

在我的路线中,我正在访问外部 API 以获取一些数据:

router.get('/', function(req, res, next) {

var request = https.get(url + 'products.json', function(response){
    var buffer = "", 
    route;

    response.on("data", function (chunk) {
        buffer += chunk;
    }); 

    response.on("end", function (err) {
    // finished transferring data
    // dump the raw data
    console.log(buffer);
    console.log("\n");
    data = JSON.parse(buffer);
    route = data;

    }); 
});

res.render('index', { 
    title: 'Home',
    products: JSON.stringify(data)

});
});
exports.router = router;
exports.products = data;

我的目标是将这个数据变量传递给客户端。 在我的 app.js 文件中,我设置了 -

app.locals.productsData = routes.products;

在我的 index.ejs 文件中,这就是我想要做的 -

 <script>
var products = <%= products %>;
</script>

或诸如

之类的东西
    <script>
        var products = <%= {{productsData}} %>;
    </script> 

我似乎找不到传递这些数据的方法。

你能帮帮我吗?

您在错误的地方调用了 res.render(数据只有在稍后 request 发送其 end 事件时才会有其值。

因此您需要将 res.render 移动到 end 事件回调中。

尝试

response.on("end", function (err) {
    // finished transferring data
    // dump the raw data
    var data = JSON.parse(buffer);
    res.render('index', { 
      title: 'Home',
      products: JSON.stringify(data)
    });
}); 

<script>
var products = "<%= products %>";
</script>