2012-02-28 1 views
1

Я создаю суперпростой файловый сервер с node.js.Загрузка файла Node.js

Я использую dotcloud принять мой сервер, который accessible here.

При попытке загрузить файл (с правильным паролем), мой код возвращает '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 или что-то еще?

+0

P.S. Я использую огромные возможности для загрузки. –

+1

Да, вам нужно запросить разрешения на запись из dotcloud, если приложение узла записывает в хост-систему – jcolebrand

+0

Как это сделать? Спасибо за быстрый ответ! –

ответ

0

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

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

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

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