【问题标题】:Node JS fs module inside browser浏览器内的Node JS fs模块
【发布时间】:2015-01-17 02:42:22
【问题描述】:

我有一个场景,我想从客户端将数据导出到 CSV。我将有一个文本框/区域或任何用户可以输入数据的地方,然后理想情况下只需单击一下,本地 CSV 文件就会使用该数据进行更新。

使用带有服务器交互的 NodeJS 及其核心模块(特别是 fs 模块)很容易实现这一点,但显然不能通过浏览器实现。

我发现某些节点模块(例如underscore)支持RequireJS 使特定模块在浏览器中工作的方法。所以对于下划线,我这样做了:

methods.js

define(['underscore'],function(_) {

    var Methods = {
        doSomething: function() {

            var x = _.size({one: 1, two: 2, three: 3, xuz: 3});

            alert(x);
        }
    };

    return Methods;
});

common.js

requirejs.config({
    baseURL: 'node_modules',
    paths: {
        underscore: 'underscore/underscore',
    }
});

require(['methods'], function(y){
    y.doSomething();
});

index.html

<script data-main="common" src="require.js"></script>
<script>
require(['common'], function() {

    require(['methods.js']);
});
</script>

以上工作正常,并会显示警报:4。

但是当我尝试使用 fs 模块时,它不会工作。它会显示这个错误:

Module name "util" has not been loaded yet for context: _. Use require([])

据我了解,这是因为fs 需要几个其他模块,其中之一是util

所以我继续将所有这些模块添加到 RequireJS 配置中。但仍然没有运气,所以我专门测试了 util 模块本身,因为这似乎不需要其他模块来工作。

现在我被这个错误困住了:Uncaught ReferenceError: exports is not defined

我尝试通过将整个模块源代码封装在这个模块中来模块化这个util模块:

define([], function() {})

但它也不起作用......我也尝试过复制underscore的模型,但仍然没有成功。

所以我想知道是否有人设法通过 RequireJS 或 Browserify 等库在浏览器中使用 utilfs 模块(或任何其他核心 NodeJS 模块)。

【问题讨论】:

    标签: javascript node.js module requirejs browserify


    【解决方案1】:

    您最好的选择(可能只有一个)是使用HTML5 FileSystem API。除了 Flash 和类似的解决方案之外,我不知道有任何其他浏览器功能可以处理客户端计算机上的文件。

    我对你的 browserify 标签有点困惑,因为你显然没有使用 Browserify。这将解决您的“未定义导出”问题。

    【讨论】:

    • 也可以在浏览器中使用filer模拟fs,使用IndexedDB模拟文件系统。
    【解决方案2】:

    没错,exports 是特定于节点的 JS(用于使您的模块的一部分在模块外可用)并且不受网络浏览器的支持。尽管 NodeJS 在技术上是 JS,但仍有一些特定于客户端的属性(如浏览器的 window 属性和 NodeJS 应用程序的 exports)不能互换。

    也就是说,here's 是一个客户端 JS 对 CSV 问题的回答。

    【讨论】:

    • 我收到的两个答案都是正确的,因为我在经过更多研究后也发现了这一点。不过,我最终为我的特定场景所做的(为了让一切远离数据库以及可能为用户提供客户端)正在运行两个 NodeJS 服务器(一个用于读取,另一个用于写入)。这些监听 CSV 文件更改,并通过 NodeJS fs 模块向文件系统写入/读取。这种方法不完全是客户端,但您避免了数据库交互和维护,而且从客户端到服务器端的一切都在 JS 中。
    猜你喜欢
    • 2014-04-24
    • 2017-10-15
    • 1970-01-01
    • 2013-08-18
    • 2018-01-01
    • 1970-01-01
    • 2021-08-18
    • 1970-01-01
    • 2015-12-27
    相关资源
    最近更新 更多