【问题标题】:Getting req.body empty using form-data in postman在邮递员中使用表单数据使 req.body 为空
【发布时间】:2020-08-26 05:43:33
【问题描述】:

当我通过这样的表单数据使用postman 发布请求时,我的 express js 中有空对象:

var storage = multer.diskStorage({
    destination: function (request, file, callback) {
        callback(null, 'public/images/course');
    },
    filename: function (request, file, callback) {
        console.log(req.file)
        if (request.files) {
            console.log(file)
           // TODO: consider adding file type extension
           fileExtension = file.originalname.split('.')[1]
           return callback(null, `${request.path}-${request.files[0]._id.toString()}.${fileExtension}`);
        }
        // fallback to the original name if you don't have a book attached to the request yet. 
        return callback(null, file.originalname) 
    }
});

var uploadImg = multer({storage : storage}).single('thumbnail')

router.post('/course',  async(req, res) => {
    console.log(req.body) // console logs empty object {}
    try{
    const course = new Course({
                name : req.body.name,
                thumbnail : 'placeholder'
            })  
            uploadImg(req, res, function (err) {
                if (err) {
                  console.log(err.message);
                  // An error occurred when uploading
                  return
                }
                console.log('Everything went fine');
                // Everything went fine
              })
    }catch(e){
        res.status().send()
    }  
})

之前我不能使用 multer 来解析数据,因为首先我想通过 mongoose 生成一个 id,然后我像上面一样使用 multer。

例如,我不能这样做:

router.post('/course', upload.single(), async(req, res) => {
    console.log(req.body) // console logs empty object {}
    try{
    const course = new Course({
                name : req.body.name,
                thumbnail : 'placeholder'
            })  
            uploadImg(req, res, function (err) {
                if (err) {
                  console.log(err.message);
                  // An error occurred when uploading
                  return
                }
                console.log('Everything went fine');
                // Everything went fine
              })
    }catch(e){
        res.status().send()
    }  
})

它给出了一个错误:意外字段。

那么有什么方法可以先获取我的 req.body 数据,这样我就可以生成我的 mongoose id 然后上传图片

//index.js

const express = require('express')
var multer = require('multer');
require('./db/mongoose')
const userRouter = require('./routers/user')
const taskRouter = require('./routers/task')
const courseRouter = require('./routers/course')

var bodyParser = require('body-parser');

const app = express()
const port = process.env.PORT || 3000



// // for parsing application/json
 app.use(bodyParser.json()) 

 app.use(bodyParser.urlencoded({ extended: true })); 

app.use(express.json())
 app.use(express.static('public'))

app.use(userRouter)
app.use(taskRouter)
app.use(courseRouter)


app.listen(port, () => {
    console.log('connected succefully')
})

【问题讨论】:

  • 你能添加你的主应用文件吗,我想看看你正在使用的模块。也许它与body-parser lib 有关。
  • 这里是@Danizavtz

标签: node.js mongodb express postman form-data


【解决方案1】:

如果您使用的是express 版本>= 4.16 您肯定可以删除 body-parser 库。 您也可以从 package.json 中删除 express `4.16 的新功能之一是带有 body-parser 的 bundle express。 如果是这种情况,请删除带有 body-parser lib 的行,并仅使用与 express 捆绑在一起的 body parser:

app.use(express.json());
app.use(express.urlencoded({ extended: true }));

如果是 版本 还要在你的 package.json 中安装 body-parser

const bodyparser = require('body-parser')
...
app.use(bodyparser.json())
app.use(bodyparser.urlencoded({extended: true}))

你应该坚持使用一种,但不要混合使用。

【讨论】:

  • 是的,首先我只使用 expess 解析器,但仍然得到空对象。没有帮助
  • 您的multer 声明在哪里处理文件?您可以从邮递员中删除文件并再次进行测试吗?
  • 看到我用我的 multer 声明更新了帖子,我尝试再次测试但没有解决@Danizavtz
【解决方案2】:

在最新版本的使用表单数据发送请求的express中,您需要在服务器端添加multer。像这样:

npm install --save multer

然后在您的主服务器文件中添加这些行。

const multer  = require('multer');
const upload = multer();
app.use(upload.array());

【讨论】:

    【解决方案3】:

    使用express-busboy 解析邮递员表单数据。

    var app = express();
    var expressBusboy = require('express-busboy');
    expressBusboy.extend(app);
    

    【讨论】:

      猜你喜欢
      • 2020-11-22
      • 1970-01-01
      • 2022-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-19
      • 1970-01-01
      相关资源
      最近更新 更多