Javascript 无法在回调中侦听/处理EventEmitter
使用来处理MongoDB,但是当尝试处理查询回调中发出的事件(即使用解析多部分上载)时,没有运气。知道为什么吗,或者是解决办法 模型 服务器Javascript 无法在回调中侦听/处理EventEmitter,javascript,node.js,mongodb,mongoose,multipart,Javascript,Node.js,Mongodb,Mongoose,Multipart,使用来处理MongoDB,但是当尝试处理查询回调中发出的事件(即使用解析多部分上载)时,没有运气。知道为什么吗,或者是解决办法 模型 服务器 是否可以确认表单解析是独立工作的,即如果忽略对数据库的调用(findOne) 如果是这样,您可能希望尝试设置form.on()回调,并在调用User.findOne()之前运行form.parse()?表单对象可能正在内部侦听请求中的“data”事件,这些事件在从findOne()发出回调时已经发生 您还可以尝试使用request.pause()和requ
是否可以确认表单解析是独立工作的,即如果忽略对数据库的调用(findOne) 如果是这样,您可能希望尝试设置
form.on()
回调,并在调用User.findOne()
之前运行form.parse()
?表单对象可能正在内部侦听请求中的“data”
事件,这些事件在从findOne()
发出回调时已经发生
您还可以尝试使用request.pause()和request.resume()(hackier):
解析是独立工作的,表单对象显然缺少这些“数据”事件。关于如何在表单中使用User.findOne回调返回的结果的建议。on('field')回调?有很多方法可以处理这个问题,例如,每次调用
“field”
回调时,您可以将数据推送到数组中,以便缓冲所有需要处理的数据。然后将事件处理程序添加到表单中。在(“end”)
上进行处理,表单中需要的所有数据都保存在数组中,以备使用。。此外,在这里使用step.js或async.js之类的库可能会使这更容易。
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);
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);