使用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);
答案 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);