【问题标题】:Error during synchronous write using Node.js使用 Node.js 进行同步写入时出错
【发布时间】:2015-03-09 02:46:28
【问题描述】:

我编写了代码来解析从 Firebase 返回的字典,其中包含使用 base64 编码的图像。我希望它简单地将这些图像写入文件,它确实如此,但是在我的写入完成后我收到以下错误:

smalloc.cc:280: void node::smalloc::SliceOnto(const v8::FunctionCallbackInfo<v8::Value>&): Assertion `end <= source_len' failed.

这是我的代码:

    // Iterate through each key in each page if each request
for (var key in request) {

    var obj = request[key];

    if (typeof (obj) == "object") {

        for (var prop in obj) {

            item++;
            if(obj.hasOwnProperty(prop)) {

                switch (prop) {

                    case "img":

                        var media = new ReceivedMedia(obj[prop]);

                        var filename = transaction.tid + "-" + item + "." + media.extension;
                        filename = filename.slice(10);
                        require('fs').writeFileSync(filename, media.b64, 'base64', function(err) {
                            if (err) throw err;
                        });
                        break;
                }
            }
        }
    }
}

我的图像很好,但错误有点奇怪,我希望不要发生。有人知道为什么会这样吗?那将非常有帮助:)

注意:ReceivedMedia 是我定义的一个类:

function ReceivedMedia(media) {
    this.b64 = media.b64;
    this.extension = media.extension;
    this.posx = media.posx;
    this.posy = media.posy;
}

附带问题:如果我使用writeFile 而不是writeFileSync,我的一张图像已损坏,而另一张图像不包含任何数据。如果在那之后我再次运行我的节点脚本,文件将正确保存。我还想解释一下为什么会发生这种情况,据我了解,其中一个是同步的(我猜是writeFileSync),另一个是异步的(我猜是writeFile)。

【问题讨论】:

标签: javascript node.js asynchronous base64 synchronous


【解决方案1】:

Google 搜索您的错误消息描述发现 this discussion of the issue in io.jsthis discussion in node.js 听起来这是一个已修复的错误(不确定修复是否已在完整版本中发布)。

node.js 修复是here

如果您现在急于在自己的构建中修复它,您必须将修复应用到您自己的代码树并重新构建它。否则,您将不得不调查或询问此修复程序何时会进入正式版本(我个人不确定该过程如何用于 node.js)。

【讨论】:

  • 我正在查看该修复程序并尝试了解如何实施它,但我没有时间。我想我会继续探索,如果这能解决我的问题,我会将其标记为答案:)。
  • @Russell - 这个错误和修复非常明确地针对完全相同的症状和为您触发的完全相同的 ASSERT。虽然证据将在于实际应用修复并看到消息消失,但这个错误和相关修复肯定看起来像吸烟枪。根据node.js changelog,自此错误修复以来似乎没有公开发布。我无法从任何 node.js 公共资源中得知 v0.12.1 是否有计划的发布时间。
  • 我得到了它。我克隆了他们的 git repo 并从源代码安装它。我现在正在运行 0.13.0-pre 并且问题消失了。我并不想争辩说它不是,但我想确保它解决了我遇到的问题并且确实解决了。谢谢你的帮助:)
猜你喜欢
  • 2011-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-29
  • 1970-01-01
  • 2016-05-05
相关资源
最近更新 更多