不能在callback中监听/处理EventEmitter

使用Mongoose来处理MongoDB,但是当试图处理在查询callback中发出的事件(即,parsing使用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); 

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

如果是这样,你可能想尝试设置你的form.on()callback,然后运行form.parse() 之前调用User.findOne() ? 表单对象可以在内部侦听"data"事件的请求,这些事件在findOne()的callback被触发时已经发生。

你也可以尝试使用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);