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

时间:2015-06-11 15:39:02

标签: javascript node.js express ejs

我正在使用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> 

我似乎无法找到传递此数据的方法。

你可以帮帮我吗?

1 个答案:

答案 0 :(得分:1)

您在错误的地方呼叫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>