0

Intel Edison で NodeJs を使用して何かを構築しようとしています。私はプラグインを使用しています: 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が実際に存在することであり、フォルダーにも権限があると思います。

私はいくつかのことを試しましたが、本当にここで立ち往生しています。これを回避する方法がわかりません。

4

1 に答える 1

0

エラーの後、ファイルは古い名前または新しい名前でそこにありますか? (私は、2 つのスレッドが誤って開始され、2 番目のスレッドがファイルが既になくなっていることを発見したケースがありました)。対象のディレクトリは存在しますか? タイプミスはありますか?

名前の変更について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 "'");
    }
}
于 2014-11-30T05:59:16.337 に答える