我正在尝试使用英特尔Edison上的NodeJ构建一些东西。我正在使用插件:https://github.com/blueimp/jQuery-File-Upload和NodeJS服务器端部件。
然而,我一直在
fs.js:543
return binding.rename(pathModule._makeLong(oldPath),
^
Error: ENOENT, no such file or directory '/home/root/db/node_modules/blueimp-file-upload-node/tmp/8fa2946958c04ad8cb6def7b1e9dab01'
at Object.fs.renameSync (fs.js:543:18)
at IncomingForm.<anonymous> (/home/root/db/node_modules/blueimp-file-upload-node/server.js:248:16)
at IncomingForm.EventEmitter.emit (events.js:98:17)
at /home/root/db/node_modules/blueimp-file-upload-node/node_modules/formidable/lib/incoming_form.js:228:12
at WriteStream.<anonymous> (/home/root/db/node_modules/blueimp-file-upload-node/node_modules/formidable/lib/file.js:70:5)
at WriteStream.g (events.js:180:16)
at WriteStream.EventEmitter.emit (events.js:117:20)
at finishMaybe (_stream_writable.js:360:12)
at afterWrite (_stream_writable.js:280:5)
at onwrite (_stream_writable.js:270:7)
每当我尝试上传某些内容时。问题是文件/home/root/db/node_modules/blueimp-file-upload-node/tmp/8fa2946958c04ad8cb6def7b1e9dab01
确实存在且我猜测我在文件夹中也拥有权限。
我尝试了几件事,但我真的被困在这里,我无法理解如何解决这个问题。
答案 0 :(得分:0)
错误之后,那个文件是旧名还是新名? (我曾经遇到两个线程无意中启动的情况,第二个发现该文件已经消失)。目标目录是否存在?任何错别字?
以下是关于重命名的linux手册页:
ENOENT oldpath命名的链接不存在;或者,newpath中的目录组件 不存在;或者,oldpath或newpath是一个空字符串。
编辑:这是一个nodejs错误,当它实际上是目标目录时,它会报告源文件丢失。要从命令行重现:
% touch /tmp/file.txt
% node -p 'fs = require("fs"); fs.renameSync("/tmp/file.txt", "/nonesuch/file.txt");'
打印:
Error: ENOENT, no such file or directory '/tmp/file.txt'
at Object.fs.renameSync (fs.js:548:18)
at [eval]:1:24
at Object.<anonymous> ([eval]-wrapper:6:22)
at Module._compile (module.js:456:26)
at evalScript (node.js:536:25)
at startup (node.js:80:7)
at node.js:906:3
编辑:这是一种可能的方法来包装renameSync()来解决这个问题(未经测试!)
var _origRename = fs.renameSync;
fs.renameSync = function(from, to) {
try { _origRename(from, to) }
catch (err) {
if (err.stack.indexOf('ENOENT') < 0) throw err;
try { fs.statSync(from) } catch (err2) { throw err }
throw new Error("ENOENT, no such file or directory '" + to "'");
}
}