node.js - Nodejs Busboy 中未定义请求正文参数

标签 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 但问题是相同的,我如何访问主体参数。

最佳答案

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

我们明确必须在 Busboy.on('finish') 事件之前将其附加到 req.body,如下所示:

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

这会将参数附加到 req.body,因为它应该是这样!

关于node.js - Nodejs Busboy 中未定义请求正文参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42697627/

相关文章:

node.js - 在 Node.js 服务器上接受请求正文中的二进制文件

javascript - 如何使用 Busboy 检测上传流意外停止

node.js - gruntjs 服务器任务的目的是什么?

node.js - 如何在 Express/node.js 应用程序中使用 mailgun/mailchimp/etc 发送电子邮件

node.js - Busboy 的奇怪行为

javascript - Node.js 表单数据最终去了哪里?

javascript - Connect-busboy : When piping file to write steam, 文件为空或不正确,具体取决于类型

javascript - JXcore 可以在 Windows 7 上与 ChakraCore 一起使用吗?

javascript - JavaScript 中的导出-导入 --- SyntaxError : Cannot use import statement outside a module

javascript - 使用 parcel 从文件加载 tensorflow.js 模型