Не удается прослушать / обработать EventEmitter при обратном вызове - PullRequest
4 голосов
/ 01 февраля 2012

Использование Mongoose для работы с MongoDB, однако при попытке обработки событий (т. Е. Анализа многочастных загрузок с Formidable ), отправленных в обратном вызове запроса, не повезло. Любая идея почему или исправить?

Модель

var mongoose = require('mongoose');

function User() {
  return mongoose.model('users', new mongoose.Schema({
    username: String,
    email: String,
    name: String
  }));
}

exports = module.exports = User;

Сервер

/** Example HTTP server
  */

var http = require('http'),
    mongoose = require('mongoose'),
    formidable = require('formidable'),
    models = require('./models');

mongoose.connect('mongodb://localhost/test');

var User = new models.User();
var form = new formidable.IncomingForm();

http.createServer(function(request, response) {
  User.findOne({ username: 'wayoutmind' }, function(error, user) {
    // Does not print to console, Event listener blackhole?
    form.on('field', function(name, value) {
      console.log(name + ':' + value);
    });
    form.parse(request);
  });
}).listen(1337);

1 Ответ

1 голос
/ 01 февраля 2012

Можете ли вы подтвердить, что синтаксический анализ формы работает независимо, т. Е. Если вы пропустите вызов в базу данных (findOne)?

Если это так, вы можете попытаться настроить обратные вызовы form.on() и запустить form.parse() до того, как совершит вызов User.findOne()? Объект формы может внутренне прослушивать "data" события по запросу, которые уже произошли к моменту обратного вызова из findOne().

Вы также можете попробовать использовать request.pause () и request.resume () (хакер):

http.createServer(function(request, response) {
  request.pause();
  User.findOne({ username: 'wayoutmind' }, function(error, user) {
       form.on('field', function(name, value) {
       console.log(name + ':' + value);
     });
     request.resume();
     form.parse(request);
  });
}).listen(1337);
...