无法在回调中侦听/处理EventEmitter

时间:2012-02-01 06:54:08

标签: javascript node.js mongodb mongoose multipart

使用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 个答案:

答案 0 :(得分:1)

您能否确认表单解析是独立工作的,即如果省略对数据库的调用(findOne)?

如果是这样,您可能需要尝试设置form.on()回调并在拨打form.parse()之前运行User.findOne() ?表单对象可以根据请求在内部侦听"data"个事件,这些事件在findOne()的回调被触发时已经发生。

你也可以尝试使用request.pause()和request.resume()(hackier):

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);