请求body参数在nodejs busboy中是未定义的

时间:2017-03-09 14:15:02

标签: node.js busboy

我正在使用formdata来获取多部分数据,因为我正在使用busboy-body-parser。但不知何故,身体无法进入,价值未定义。

app.js

var express = require('express');
var mongoose = require('mongoose');
var Uploader = require('s3-image-uploader');
var config = require('./config.js');
var busboyBodyParser = require('busboy-body-parser');
var uploader = new Uploader({
    aws: {
        key: config.awsKey,
        secret: config.awsSecret
    },
    websockets: false
});
var bodyParser = require('body-parser');
var jwt = require('jsonwebtoken');
var multer = require('multer');
// var uuid = require("uuid");
var app = express();
var morgan = require('morgan');
var path = require('path');
var port = process.env.PORT || 3000;
var foodtrucklist = require('./controller/foodtrucklist.js');
var login = require('./controller/login.js');
var itemInfo = require('./controller/item_info.js');
var review = require('./controller/reviews.js');
var popularitems = require('./controller/popularitems.js');
var foodtruck = require('./model/datafoodtruck');
var truckData = require('./model/foodtruck.js');
var webToken = require('./controller/webtoken.js');
var userprofile = require('./controller/userprofile.js');
var notificationdata = require('./model/dataNotifications.js');
var notification = require('./controller/notifications.js');
var foodtruckItemList = require('./controller/item_list_foodtruck.js');
var orderList = require('./controller/orders_foodtruck.js');
var ordermanagement = require('./controller/ordermanagement.js');

var db = mongoose.connect(config.local_mongo_url);

mongoose.connection.once('connected', function() {
    console.log("Connected to database")
    // foodtruck.save();
    // notificationdata.save();
});




app.use(bodyParser.urlencoded({
    extended: true
}));
// app.use(multipartyMiddleware);
app.post('/testupload', function(req, res) {
    // var file = req.files.file;
    // var stream = fs.creatReadStream(req.files.file.path);
    // return s3fsImpl.writeFile(file.originalFilename, stream).then(function() {
    //     console.log(file);
    //     return;
    //     fs.unlink(file.path, function(err) {
    //         if (err) console.error(err);
    //         res.json({
    //             status: '200',
    //             message: 'uploaded'
    //         });
    //     });
    // })
    res.connection.setTimeout(0);
    uploader.upload({
            fileId: 'someUniqueIdentifier',
            bucket: 'quflip',
            source: './public/images/food-3-mdpi.png',
            name: 'food-3-mdpi.png'
        },
        function(data) { // success
            // console.log('upload success:', data);
            res.json({
                status: '200',
                message: 'image uploaded successfully'
            });
        },
        function(errMsg, errObject) { //error
            // console.error('unable to upload: ' + errMsg + ':', errObject);
            res.json({
                status: '404',
                message: 'image is not uploaded successfully'
            });
        });
});

// app.use('/public/images', express.static(__dirname + '/public/images'));
app.use(morgan('dev'));


// app.use(bodyParser.urlencoded({extended: true}));
app.get('/foodtrucklist', foodtrucklist);
app.post('/itemInfo', itemInfo.itemInfo);
app.post('/likeitem', itemInfo.likeItem);
app.get('/popularitems', popularitems);
app.post('/notification', notification);
app.post('/submitreview', review.addreview);
app.post('/getreview', review.getReview);
app.post('/addOrder', ordermanagement.addOrder);
app.post('/orderHistory', ordermanagement.orderHistory);
app.post('/cancelOrder', ordermanagement.cancelOrder);
app.post('/getOrderStatus', ordermanagement.getOrderStatus);
app.post('/rateOrder', ordermanagement.rateOrder);
app.post('/updateUser', userprofile.updateUser);
app.post('/getUserInfo', userprofile.getUserInfo);
app.post('/createToken', webToken.createToken);
app.post('/checkToken', webToken.checkToken);
app.post('/itemList', foodtruckItemList.getItemList);
app.post('/updateItemStatus', foodtruckItemList.updateItemStatus);
app.post('/addItem', foodtruckItemList.addItem);
app.post('/deletItem', foodtruckItemList.deletItem);
app.post('/orderlist', orderList.getOrderList);
app.post('/statusOrderlist', orderList.getStatusOrderList);
app.post('/updateorder', orderList.updateOrder);

app.use(bodyParser.urlencoded({extended: false}));
app.use(busboyBodyParser({ limit: '50mb' }));
app.post('/login', function(req,res) {
    console.log("body" + req.body.email_id + "file" + req.files);
});



app.listen(port, function() {
    console.log('express listining on port' + port);
});

所以,即使我尝试使用multer,我怎样才能访问身体参数但问题是相同的。

1 个答案:

答案 0 :(得分:0)

Busboy在busboy.on('field')事件中具有参数

我们必须明确地将其附加到req.body事件之前的Busboy.on('finish')上,像这样:

busboy.on('field', (fieldName, value) => {
  req.body[fieldName] = value
})

这会将参数附加到req.body上!