【发布时间】:2015-08-07 17:45:06
【问题描述】:
我在 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) 库上传文件。 上传
(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
【问题讨论】:
-
仅供参考(与您询问的问题无关),如果您的 3 个异步操作中的任何一个出现错误,您永远不会向浏览器发送响应。
-
@jfriend00 相同的代码适用于小文件。我做了更多测试,发现了导致问题的 client.writeFile 函数。我不明白。它是一个标准库。我需要自己处理递归吗?
-
你显然没有理解我的评论。我是说您对三个异步操作的错误处理无法正常工作。这与您发布的主要问题无关 - 这是您应该解决的额外问题。
标签: node.js recursion dropbox dropbox-api stack-size