小编jap*_*ott的帖子

获取流的内容长度

在我的node.js应用程序中,我正在使用gm(一个graphicsmagick包装器)aws2js(amazon cli包装器).问题是亚马逊需要知道内容长度,以便我可以将流放在S3上.

我正在将图像上传到我的应用,通过创建流来读取该文件:

var fileStream=fs.createReadStream(file.path)
Run Code Online (Sandbox Code Playgroud)

我将该文件传递给gm,调整它的大小,然后告诉它传输该文件.然后我想把那个流放到aws:

gm( fileStream, "some.png" ).                               
    identify({bufferStream: true}, function(err, info) {
        this.stream("png", function (err, stdout, stderr) {
            if (err){console.log(err);cb(err);return;}

            aws.S3.putStream(path, stdout, 'public-read', {'content-length': ?????, 'content-type': 'image/png'}, function (err, result) {
            .....       
            }
        });
    });
});
Run Code Online (Sandbox Code Playgroud)

问题是亚马逊需要知道放置流的内容长度(不是库).AWS不支持分块流.

有谁知道我如何确定流的内容长度?或者唯一的解决方案是将tmp写入磁盘,将文件作为流读取,然后将其与临时文件的内容长度一起放入亚马逊?

javascript stream amazon-s3 node.js

15
推荐指数
1
解决办法
8940
查看次数

如何检查/迭代节点中的对象?

我从一个猫鼬查询中得到一个结果(该对象),并希望在我对该对象进行字符串化并将其发送到客户端之前替换/删除一些键.

当我在console.log对象时,一切都很好(列出所有键,仅此而已).当我在对象上执行for..in时,隐藏的字段突然冒出(并且感兴趣的键,不要).它们有意义 - 它们属于猫鼬 - 但我不想要它们.同样的事情发生,当在Object - hidden字段弹出窗口上使用Object.keys或Object.getOwnPropertyNames时,没有用.

所以我想用util.inspect(obj,true,null,true)检查元素,并将结果记录到控制台.控制台上的结果是一样的,好像我在没有检查的情况下直接记录对象.

现在,有两个问题;

  1. 如何正确检查对象,以便实际获取有关对象的内部/隐藏信息?
  2. 如何迭代对象并仅获取字段?(是的,我在for..in循环中进行hasOwnProperty检查)

//编辑

好,我知道了.经过一些调查,我意识到,mongoose对象代理其属性并具有toJSON函数,这解释了为什么console.logs处于预期的输出结构中.解决方案是使用Mongoose自己的toObject方法;

mongooseObj.toObject({ getters: true, virtuals: false })
Run Code Online (Sandbox Code Playgroud)

这样,我可以迭代Object.getOwnPropertyNames并替换/删除我不希望客户端知道的键!

javascript mongoose node.js ecmascript-harmony

5
推荐指数
1
解决办法
1811
查看次数

异步ajax回调所淹没的"原子"操作

我知道,使用JavaScript和'atomic'这两个词 - 同一个句子中的任何内容都有点奇怪,因为JavaScript被认为是异步的,因此不是非常原子的.

//编辑这是我的错误!通过让警报响起(并在Chrome中隐藏更多警报),它很快就会中断并让其他代码飞起来.JavaScript是单线程的.

快速 - >实际问题; 我们在哪种情况下从异步回调中断中保存,我们如何防止它们出现在某些代码块中?

长 - >我的情景; 我的整个应用程序非常递归并触发了许多ajax请求,返回时会触发更多可能触发更多ajax请求的递归函数.在我的代码中,我在一个数组上有一些非常关键的操作,必须在下一个操作发生之前完成(尽管简单的push/splice逻辑).

我有一个问题,我在一个数组中获得了一个键的索引并将其保存在一个变量中.然后我把它比作-1,如果它是真的,我拼接(不仅仅是取消)数组中的元素.现在,在获取索引和拼接之间,异步回调返回结果并启动递归的东西,然后通过添加/删除更多项来改变数组(并弄乱我之前获得的索引值).

这是旧代码;

if ( this.dataset && (index=this.dataset.children.indexOf(child.key) )!==-1 ){
    console.log("removed from dataset!");
    //<=== AJAX Call Returns and adds/removes items from the array
    this.dataset.children.splice(index, 1); //goes bad, because index not good anymore
    ...
}
Run Code Online (Sandbox Code Playgroud)

这是'工作',但不是优化的代码

if ( this.dataset && (index=this.dataset.children.indexOf(child.key) )!==-1 ){
    console.log("removed from dataset!");  
    //<=== AJAX Call Returns and adds/removes items from the array
    //Problem solved, since I'm getting the index again
    this.dataset.children.splice(this.dataset.children.indexOf(child.key), 1);
    ...
}
Run Code Online (Sandbox Code Playgroud)

我只是再次搜索索引并直接拼接它.

我的一般问题是,我们在哪种情况下从异步回调中断中保存,我们如何防止它们出现在某些代码块中? …

javascript ajax asynchronous transactions atomic

2
推荐指数
1
解决办法
3885
查看次数

在javascript中获取浏览器类型

我需要根据浏览器类型加载不同的电影格式.特别是如果用户使用的是Firefox,那么我需要加载一个.ocv视频.

我尝试过使用:

alert(navigator.appName); 
Run Code Online (Sandbox Code Playgroud)

但这总是在chrome和firefox中返回'Netscape'?

还有更好的选择吗?

干杯

javascript browser html5 user-agent html5-video

2
推荐指数
1
解决办法
2421
查看次数

libicui18n.so.52:无法打开共享对象文件

我一直在使用 libicu 来检测在 docker、ubuntu 内部运行的节点应用程序中的字符集。这是通过使用该包的模块node-icu-charset-detector 完成的libicu-dev我在 npm 包之前安装了该包。

一切正常,但我突然收到错误

module.js:356
  Module._extensions[extension](this, filename);                               ^
Error: libicui18n.so.52: cannot open shared object file: No such file or directory
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.require (module.js:364:17)
    at require (module.js:380:17)
    at Object.<anonymous> (/app/node_modules/node-icu-charset-detector/node-icu-charset-detector.js:1:82)
Run Code Online (Sandbox Code Playgroud)

查看我的 /usr/lib/,我没有找到任何与 icu 相关的东西,但是安装了 libicu-dev。

这是我的 docker 文件;

# Pull base image.
FROM dockerfile/ubuntu

WORKDIR /
ADD run.sh /run.sh

#make dirs
RUN mkdir /log
RUN mkdir /app

RUN apt-get install -y supervisor libssl-dev pkg-config wget


# …
Run Code Online (Sandbox Code Playgroud)

ubuntu shared-libraries icu node.js docker

2
推荐指数
1
解决办法
2万
查看次数

FirefoxOS上的文件输入(Boot2Gecko!== Gecko?)

我正在为firefoxos(Boot2Gecko)开发一个webapp,并注意到,单击一个输入(type = file)时没有文件选择器.我遇到了这个错误,似乎有一段时间没有任何动作 - 幸运的是,我们至少现在可以检测它是否已被禁用.

但是,是不是boo2gecko/firefoxos应该在最新的Gecko引擎上运行,因此支持firefox在android上做的一切?我对这个事实感到非常惊讶.与Chromium和ChromeOS相似的情况是,它们不支持彼此的常见网络功能吗?我仍然对这种不一致感到震惊!有关这种分歧的任何见解?

javascript gecko file-upload google-chrome-os firefox-os

0
推荐指数
1
解决办法
333
查看次数