formidable Express 500 TypeError: Невозможно вызвать метод 'complete' из неопределенного - PullRequest
1 голос
/ 01 декабря 2011

Я пытаюсь загрузить файлы с NodeJS, я пробовал самые распространенные многокомпонентные библиотеки, но не могу заставить его работать.

Когда я отправлял файл, я ничего не получал, простоОшибка 500, которая не существует, метод называется завершенным.Я попробовал подобный модуль в одиночку, и он хорошо работает.Возможно ли иметь некоторые вар сбой?Я сделал несколько console.log, util и ничего не получил в форме переменных.

Это кусок кода.Если у вас есть блестящая идея, чтобы попытаться решить эту проблему, и вам нужно больше кода, не стесняйтесь спрашивать!

 var express       = require('express');
 var form          = require('formidable');

 var app = module.exports = express.createServer(
   express.favicon()
   , express.bodyParser()
   , express.cookieParser()
   , express.session({secret: 'topsecret'})
   , everyauth.middleware()
   , express.router(routes)
 );


app.configure(function(){

  app.use(express.bodyParser());
  app.use(express.cookieParser());
  app.use(express.session({secret: "aiudhasiudj12" }));
  app.use(everyauth.middleware());
  app.use(app.router);
  app.set('view engine', 'jade');
  app.use('views', __dirname + '/views');
  app.use(express.static(__dirname + '/public'));
  app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
  app.use(form({ keepExtensions: true }));

});

app.configure('development', function(){
  app.use(express.errorHandler({ dumpExceptions: true, showStack: true })); 
});

 everyauth.everymodule
   .findUserById( function (userId, callback) {

   Login.findLocalByEmail([userId], function (error, results) {
     callback(null, { userId: userId, data: results});
   });
 });

 everyauth.facebook...

 [...]

 app.get('/la', function(req, res){
  res.send('<form action="la" method="post" enctype="multipart/form-data">'
    + '<p>Image: <input type="file" name="image" /></p>'
    + '<p><input type="submit" value="Upload" /></p>'
    + '</form>');

    //console.log(util.inspect(form, true, null));
});

 app.post('/la', function(req, res) {

  console.log(util.inspect(req.form, true, null));

  req.form.complete(function(err, fields, files) {

    console.log(fields);
    console.log(files);

    if(err) {
      next(err);
    } else {

    }
  });
});

Спасибо!

Ответы [ 3 ]

2 голосов
/ 01 декабря 2011

Экспресс включает в себя подключение, которое включает в себя грозные.

Все, что вам нужно сделать, это использовать bodyParser и проверить наличие «req.body», которое должно содержать все поля формы.

1 голос
/ 01 декабря 2011

У вас есть два варианта.

  1. Если вы хотите использовать req.form, вам необходимо использовать https://github.com/dandean/express-form middleware.

  2. Но, при условии, что вына самом деле вы хотите использовать formidable, правильный код, который вы пишете в обработчике запросов, будет следующим:

    var form = new formidable.IncomingForm();
    form.parse(req, function(err, fields, files) {
      res.writeHead(200, {'content-type': 'text/plain'});
      res.write('received upload:\n\n');
      res.end(sys.inspect({fields: fields, files: files}));
    });
    
0 голосов
/ 23 апреля 2012

Если имя вашего файла в html-форме «image», вам нужно проверить «req.files.image». Попробуйте следующее:

console.log('File name: ' + req.files.image.name);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...