2016-07-07 53 views
0

我现在坚持使用NodeJS和Busboy的项目。 我试图从我的路由器中检索所有变量并将其发送给控制器。Node JS - Busboy检索参数

app.js(路由)

router.post('/product', function (req, res) { 
var fields = {}; 
req.busboy.on('field', function(fieldname, val) { 
     fields[fieldname] = val; 
}); 
req.busboy.on('file', function (fieldname, file, filename, encoding, mimetype) { 
    fields[filename] = file; 
}); 
req.pipe(req.busboy); 


productController.addNewProduct(fields, function (data) { 
    res.json(data); 
}); 
}); 

ProductController.js

addNewProduct: function (params, callback) { 
    productLogic.addNewProduct(params, function (data) { 
     callback(data); 
    }); 
}, 

ProductLogic.js

addNewProduct: function (params, callback) { 
    Product.findOne({ name: params.name }, function (err, product) { 
     if(err) callback({ status: false, message: err }); 

     if(product) 
      callback({ status: false, message: 'Produk sudah ada.' }); 

     var newProduct = new Product({ 
      name: params.name, 
      category_id: params.category_id, 
      description: params.description, 
      is_active: true 
     }); 

     newProduct.save(function (err, result) { 
      if(err) callback({ status: false, message: err }); 

      callback({ status: true, message: result }); 
     }); 
    }); 
}, 

我的目标是一次性处理数据。现在我不确定我是否可以用公务员实现它。

请帮我解决这个问题。提前

回答

0

感谢

一堆你应该等待打杂完成调用你的方法之前,解析您的形式。

busboy.on('finish', function() { 
    productController.addNewProduct(fields, function (data) { 
    res.json(data); 
    }); 
}); 
0

我想我已经找到了答案。 感谢marton的高举。

我已经试过:

busboy.on('finish', function() {}); 

但它从来没有发出。

的原因是我要file.resume()在我的busboy.on( '文件'),例如:

busboy.on('file', function(fieldname, file, filename, encoding, mimetype) { 
fields[fieldname] = file; 
file.resume(); 

再次感谢:)