Node JS - Busboy检索参数

时间:2016-07-07 17:34:33

标签: javascript node.js busboy

我现在使用NodeJS和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 });
        });
    });
},

我的目标是一次处理所有数据。而现在我不确定我是否能用busboy实现它。

请帮我解决这个问题。

提前致谢

2 个答案:

答案 0 :(得分:0)

在调用方法之前,您应该等待busboy完成解析表单。

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

答案 1 :(得分:0)

我想我已经找到了答案。 感谢marton的领导。

我试过了:

position: absolute

但它从未发射过。

原因是我必须在我的busboy.on('file')中使用file.resume(),例如:

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

再次感谢:)