req.files在填充req.body时返回未定义的数据

问题描述 投票:0回答:1

设置:

  • Node.js的(v8.9.4)
  • 快递(第16.2节)
  • Superagent v3.8.2(https://github.com/visionmedia/superagent)来自客户的POST
  • 文件上传文件(v1.3.0)
  • 反应/巴贝尔/的WebPack
  • CentOS 7,Vultr VPS
  • 文件大小限制从nginxmulter扩展到50mb
  • 私有git部署(整个平台版本一致)

症状:

当通过http POST调用发送字符串化JSON数据和图像的混合时,服务器通过multer(multer.any())接收随机数量的图像。文件已上载并存在于服务器的公用文件夹中。 req.body也行,但不知怎的,我无法访问req.files。它返回undefined。从heroku和我的桌面localhost,该应用程序运行正常。图像上传OK,访问req.files数据也没有问题。只有VPS / CentOS7服务器出现问题。

客户端(React / Superagent / Babel / Webpack)

import request from 'superagent'

request.post('/modwimg')
.query({
  //some token and other info goes here
})
.accept('application/json')
.field('data',JSON.stringify(jsonData))
.attach('image',this.state.imagedata)
.attach('bannerimage',this.state.bannerimagedata)
.then((res)=>{
  console.log('upload finished')
  this.setState({goback:true})
})
.catch((err)=>{

})

服务器端

const bodyParser = require('body-parser')
const multer = require('multer')
const pubDir = path.join(__dirname, 'pub')
const storage = multer.diskStorage({
  destination: (req,file,cb)=>{
    cb(null,'pub/')
  },
  filename: (req,file,cb)=>{
    cb(null,Date.now() + file.originalname)
  }
})
const upload = multer({storage:storage})

//allowing public access, image goes to public dir
app.use('/pub', express.static(pubDir))

/* initialize bodyparser to build up RESTful app */
//file size limit expansion
app.use(bodyParser.urlencoded({limit:'50mb', extended:true}))
app.use(bodyParser.json({limit:'50mb'}))

app.post('/imageupload',upload.any(),(req,res,next)=>{
  //some token approval goes here
  console.log(req.files) // <----this returns undefined data, but image is still uploaded
  console.log(req.body) // <---- this is fine!!

  //putting data(JSON.parse(req.body)) to db
  db.any( //....
  )
  //then respond to client
  res.json({result:true})
})
javascript node.js multer superagent
1个回答
0
投票

问题解决了。我已经从extendedextended:false选项改为app.use(bodyParser.urlencoded({limit:'50mb', extended:true})),现在它就像魔法一样。我从某个地方读到extendedbodyParser选项将其余的http请求数据转换为其他格式,所以我改变了它,现在它可以工作了。

© www.soinside.com 2019 - 2024. All rights reserved.