使用dropbox nodejs api

时间:2015-05-26 07:18:58

标签: node.js recursion dropbox dropbox-api stack-size

我在ubuntu上运行节点服务器。 我在nodejs中使用dropbox模块。(https://www.npmjs.com/package/dropbox

node -v = v0.10.38

npm -v = 1.4.28

我在前端使用angularjs来使用(https://github.com/danialfarid/ng-file-upload)库上传文件。 上传小文件< 25mb工作正常。它正在上传到服务器并上传到Dropbox。但是当文件大于(50mb)时。这是错误的。

(node) warning: Recursive process.nextTick detected. This will break in the next version of node. Please use setImmediate for recursive deferral.

RangeError: Maximum call stack size exceeded.

以下是我正在使用的相关代码:

var client = new Dropbox.Client({
    "key": "XXXXXXXXXXX",
    "secret": "XXXXXXXXXXXX",
    "token": "XXXXXXXXXXXXXXXXXXx",
    "uid": "XXXX"
});
    app.all('/test', function (req, res) {
        console.log(req.files); 
        var f = req.files.file;
        var dbx_file_stat;
        var short_url;
        var new_file_name = 'generate file name';
        fs.readFile(f.path, function (error, data) {
            if (error) {
                console.log('read error');
                return console.log(error);
            }
            client.writeFile(new_file_name, data, function (error, stat) {
                if (error) {
                    console.log('write error');
                    return console.log(error);
                }
                //stopReportingProgress();
                client.makeUrl(new_file_name, {downloadHack:true},function (error,url) {
                        if (error) {
                        return console.log(error);
                    }                                       
                    res.send("it works");                             
                });
            });
        });
    })

大文件正在上传到服务器但无法在Dropbox服务器上传。 我做了一些研究。有人建议使用(https://nodejs.org/api/timers.html#timers_setimmediate_callback_arg)。但是如何实施。是什么导致了这个问题? 我还尝试通过node --stack-size=320000 app.js运行应用 在此之后出现了新的错误,

(node) warning: Recursive process.nextTick detected. This will break in the next version of node. Please use setImmediate for recursive deferral.
Segmentation fault

1 个答案:

答案 0 :(得分:0)

我无法使用以下代码和75MB文件重现您的错误。也许这个问题与您应用的其他部分有关。 (看起来你可能正在使用Express吗?)

var fs = require('fs'),
    dropbox = require('dropbox');

var client = new dropbox.Client({ token: "REDACTED" });

fs.readFile('testfile', function (error, data) {
    client.writeFile('testfile', data, function (error, stat) {
        if (error) {
            console.log('ERROR: ' + error);
        } else {
            console.log(stat);
        }
    });
});

如果您仍然能够重现错误,请分享一个较小的复制品。