【问题标题】:Passing extra values by POST to another function通过 POST 将额外值传递给另一个函数
【发布时间】:2019-07-25 11:35:23
【问题描述】:

我在通过帖子将groupId 传递给我的函数来处理它时遇到了一些麻烦,基本上我正在上传一张图片,但我需要通过 groupId 将它重命名为我的其他函数上的图片,我正在使用 react并表示这样做:

  onFormSubmit = async (event) => {
    event.preventDefault();
    const { imageFile, currentGroupId } = this.state;
    var formData = new FormData();
    formData.append('groupImage', imageFile);
    const config = {
      headers: {
        'content-type': 'multipart/form-data'
      }
    };
    await api.post('/fileUpload/group', { currentGroupId }, formData, config );
  }

我的路线:

router.post('/group', (req, res) => {
  fileuploadmanager.uploadFile(req, res);
});

还有后端:

uploadFile(req, res) {
    const { uploadsPath } = this.porperties;
    const { currentGroupId } = req.body;//it prints but formData and config never comes here
    console.log("GROUP: ", currentGroupId);
    const storage = multer.diskStorage({
      destination: uploadsPath,
      filename: (req, file, cb) => {
        cb(null, `${file.fieldname}-${Date.now()}${path.extname(file.originalname)}`);
      },
    });

    const upload = multer({
      storage,
      limits: {
        fileSize: 1000000,
      },
      fileFilter: (req, file, cb) => {
        this.checkFileType(file, cb);
      },
    }).single('groupImage');

    upload(req, res, (err) => {
      if (err) {
        console.log(err);
      }
    });
  }

仅发送 formDataconfig 有效,但如果我将 groupId 添加到端点,则它不起作用。 我尝试在formData 中附加它的值,但我无法在后端获取它,所以现在我尝试将它作为 req.body 传递,它工作正常,但我的其他参数没有传递到后端。

如何将我的 groupId、formData 和配置传递到我的后端?

编辑: api 是用于指定我的后端 URL 的包装器。我正在使用axios

import axios from 'axios';

export default axios.create({
  baseURL: process.env.REACT_APP_API_URL  
});

参考文献:

【问题讨论】:

  • 什么api.post?我的意思是你在这里用什么?可能这个方法没有额外的参数。
  • 这是一个 axios 类包装器,用于指定我的后端 URL,它可以工作。无论如何我用这个包装器更新了帖子。
  • 首先,你需要做两件事:1)调试你的this.stateimageFilecurrentGroupId行; ... 2)在您的 config 属性集标题中,例如 formData.getHeaders()
  • 接下来,在这里发布结果

标签: reactjs express


【解决方案1】:

尝试将所有数据发送到一个对象await api.post('/fileUpload/group', { currentGroupId, formData, config }); 然后获取uploadFile(req, res) { const postData = req.body;中的数据; 这应该可以解决问题。

【讨论】:

  • 我试过了,但我得到了POST /api/v1/fileUpload/group 500 56.009 ms - 2320 TypeError: Cannot read property 'transfer-encoding' of undefined
  • router.post('/group', (req, res) => {这条路线和api.post('/fileUpload/group'一样吗?
  • 实际上是的,因为我有另一个文件在这个类上的所有端点前面加上 fileUpload 前缀,这不是问题所有数据都可以很好地发送到我的 uploadFile 函数,唯一的问题是发送额外的在这种情况下为参数currentGroupId
  • 酷,await api.post('/fileUpload/group', { currentGroupId, formData }, config); 我也将配置放入数据中。现在试试这个。
  • 也做一个console.log(req.body)
猜你喜欢
  • 1970-01-01
  • 2022-06-22
  • 2020-10-21
  • 2021-02-27
  • 1970-01-01
  • 2016-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多