1

node.jsで超シンプルなファイルサーバーを構築しています。

ここからアクセスできるサーバーをホストするために dotcloud を使用しています

(正しいパスワードを使用して) ファイルをアップロードしようとすると、コードが を返します'Error, incorrect password!'。以下のコードを見て、その理由を説明します。

var success = false;
        var form = new formidable.IncomingForm();
        form.parse(req, function(err,fields, files) {
            console.log("Password: " + fields.password);
    if(fields.password!="poop") {
        return;
    }
       fs.rename(files.upload.path, files.upload.name, function (err) {  });
       success = true;
          res.writeHead(200, {'content-type': 'text/plain'});
          res.write('received upload:\n\n');
          res.end();
        });
        req.on('end', function() {
          // empty 200 OK response for now
      if(success) {
              res.writeHead(302, { 'location': '/' });
          } else {
      res.writeHead(200, {'content-type': 'text/plain'});
              res.write('Error, incorrect password!\n');
      }
          res.end();
        });

私のコードは 'fs.rename(files.....)' で失敗していると思います。成功変数が true に設定されていないからです。私のコードは、ローカルの node.js インストールで動作します。dotcloud などから書き込み権限を要求する必要がありますか?

4

1 に答える 1

0

endHTTP リクエストのイベントは、formidable がフォームを解析する前に発行されると思います。

イベント ディスパッチの正確な順序は、Node.js のドキュメントでは定義されていません。そのため、Node.js のバージョンやプラットフォームによっては、最終的に異なる順序で処理される可能性があります。

その場合、それが発生した場合は、success実際falseにフォームを解析する前に返信を送信します。

代わりに、フォーム解析関数でエラーを処理する必要がありますか?

于 2012-05-18T23:10:03.483 に答える