express接收不了前端传来的formdata

发布于 2022-09-06 22:40:57 字数 2679 浏览 17 评论 0

前端代码

        <li class="block">上传产品图片:
          <img :src="productImg" alt="real-photo" v-if="productImg">
          <input type="file" ref="proupload" name="file" class="detailsImg" id="profile" accept="image/*" >
        </li>

        <li class="block">上传产品详情图片:
          <img :src="preview" alt="real-photo" v-if="preview">
          <input type="file" ref="detailsupload" name="file" class="detailsImg" id="file" accept="image/*" >
        </li>
getImg(){

        var that = this
        var proFile = this.$refs.proupload
        var detailFile = this.$refs.detailsupload

        let pro = new FormData(proFile)
        let formData = new FormData(detailFile);

        pro.append('file',this.$refs.proupload.files[0]);
        formData.append('file',this.$refs.detailsupload.files[0]);

        console.log(pro.get('file'));
        console.log(formData.get('file'));

        var config = {
          name:that.productVal,
          img:pro.get('file'),
          menu: that.menuSele,
          list:[
            {
              productDetails:formData.get('file'),
            }
          ]
        }
        axios({
          method:'post',
          url:'/proDetails',
          data:config,
          headers: {
            'Content-Type': 'application/x-www-form-urlencoded',
          }
        })
          .then(function(res){
            console.log(res)
          })
      }
    }

后端代码

function(folder){
  try{
    fs.accessSync(folder);
  }catch(e){
    fs.mkdirSync(folder);
  }
};
var upload = './public/images'
createFolder(upload);
// 通过 filename 属性定制
var storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, upload);    // 保存的路径,备注:需要自己创建
  },
  filename: function (req, file, cb) {
    // 将保存文件名设置为 字段名 + 时间戳,比如 logo-1478521468943
    cb(null, file.fieldname + '-' + Date.now()+'.png');
  }
});
// 通过 storage 选项来对 上传行为 进行定制化
var uploads = multer({ storage: storage }).any()

var proDetilasSchema = new mongoose.Schema({
  name : String,
  img : String,
  list : [Schema.Types.Mixed]
});

var MyModel = mongoose.model('productDetails', proDetilasSchema);

router.get('/', function(req, res, next) {
  return res.status(200).json({msg:'进来了'});
});

router.post('/',uploads, function(req, res, next) {
  return res.status(200).json({msg:'1'});
});
module.exports = router;

前端代码发送数据的formData.get('file') 换成对应的pro和formData 也不行

后端接收的req.body

{"name":"123","img":{},"menu":"123","list":[{"productDetails":{}}]}
为什么formdata是空的,后端如何处理接收过来的formdata?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

oО清风挽发oО 2022-09-13 22:40:57

前端传递的根本不是一个formdata,还是一个json对象,只不过是指定了content-type

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文