javascript - 在 Sails.js 中将数据从文件传输到渲染页面

标签 javascript node.js express stream sails.js

我的应用程序需要读取大型数据集并将其通过管道传输到客户端以使用 D3.js 进行操作。问题是,在大型数据集上,文件内容的读取/加载可能需要一段时间。我想用流来解决这个问题。但是,我不确定如何在 Sails 框架的上下文中这样做。

我想要做的是读取文件的内容并将其通过管道传输到呈现的页面。但是,如果我使用 res.view('somePage', { data: thePipedData }); 之类的东西,我不知道如何通过管道传输它。

我目前有这样的东西:

var datastream = fs.createReadStream(path.resolve(DATASET_EXTRACT_PATH, datatype, dataset, dataset + '.csv'));
datastream.pipe(res); 
...
return res.view('analytics', { title: 'Analytics', data: ??? });

解决这个问题的最佳方法是什么?

最佳答案

根据您的示例,最好的做法似乎是设置一个单独的端点来仅提供数据,并通过常规 <script> 将其包含在客户端上。标签。

MyDataController.js

getData: function(req, res) {

    /* Some code here to determine datatype and dataset based on params */

    // Wrap the data in a Javascript string
    res.write("var theData = '");
    // Open a read stream for the file
    var datastream = fs.createReadStream(
        path.resolve(DATASET_EXTRACT_PATH, datatype, dataset, dataset + '.csv')
    );
    // Pipe the file to the response.  Set {end: false} so that res isn't closed
    // when the file stream ends, allowing us to continue writing to it.
    datastream.pipe(res, {end: false});
    // When the file is done streaming, finish the Javascript string
    datastream.on('end', function() {
        res.end("';");
    });

}

MyView.ejs

<script language="javascript" src="/mydata/getdata?datatype=<%=datatype%>&etc.."></script>

MyViewController.js

res.view('analytics', {datatype: 'someDataType', etc...});

此策略的一个细微变化是使用 JSONP 样式的方法;与其将数据包装在数据 Controller 操作中的变量中,不如将其包装在函数中。然后您可以通过 AJAX 调用端点以获取数据。无论哪种方式,您都可以获得快速页面加载的好处,因为大型数据集是单独加载的,但是使用 JSONP 变体,您还可以在等待数据时轻松显示加载指示器。

关于javascript - 在 Sails.js 中将数据从文件传输到渲染页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25518591/

相关文章:

javascript - 如何测试包含异步函数的nodejs导出

javascript:创建全局变量的本地范围会在设置之前取消定义它

javascript - 如何仅阻止页面上按键的特定默认操作?

javascript - TypeError : Cannot read property 'get' of undefined. 是 npm 的问题吗?

node.js - 使用 express 提供静态文件时无法使用基本身份验证

javascript - 使用 Express、Node 和 Rest 从 AngularJS 发布数据

javascript - 使用 array.some 仅返回匹配的子对象

javascript - 单击选项卡调用 jQuery 函数

node.js - 从 npm 包导入 jquery?

javascript - app.render [TypeError : Cannot set property 'content' of undefined] Using Express with Gaikan in Node. js