Загрузка файла Node.js не работает - PullRequest
1 голос
/ 29 февраля 2012

Я создаю супер простой файловый сервер с помощью 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 (файлы .....)', так как тогда переменная успеха не установлена ​​в true. Мой код работает на моем локальном узле node.js. Нужно ли запрашивать разрешение на запись у dotcloud или что-то в этом роде?

1 Ответ

0 голосов
/ 19 мая 2012

Я полагаю, что событие end для HTTP-запроса отправляется до того, как анализирует форму.

Точный порядок отправки событий не определен в документации Node.js.;возможно, в зависимости от версии и / или платформы Node.js они обрабатываются в разных заказах.

В этом случае, если это произойдет, success будет false, и выотправьте ответ еще до того, как проанализируете форму.

Может быть, вместо этого вы должны обрабатывать ошибки в функции разбора формы?

...