В настоящее время я загружаю изображение и данные, используя два вызова к серверу, и я хочу сократить это до одного вызова к серверу.
Мой текущий код внешнего интерфейса выглядит следующим образом. Поле ввода:
<input
required
type="file"
onChange={this.fileUploaded}
/>
Загрузка в состояние с использованием этого кода:
userEvent.image = new FormData()
userEvent.image.append('file', e.target.files[0])
this.setState({ userEvent })
Отправка в бэкэнд с использованием этого кода:
let data = this.state.userEvent.image
let eventData = this.state.userEvent
eventData.token = localStorage.getItem("token")
axios.post(`${process.env.REACT_APP_API}/image`, data)
.then(res => {
axios.patch(`${process.env.REACT_APP_API}/events/${res.data._id}`, eventData)
.then(res => {console.log(res)})
.catch(err =>{console.log(err)})
})
.catch(err => {
console.log("imgerr", err)
})
и моего бэкэнд-кода (для первого вызова сервера):
const Event = require('../models/events')
module.exports = (req, res) => {
let apiUrl = req.protocol + '://' + req.get('host') + '/'
let newEvent = {
imageURL: apiUrl + req.file.filename,
}
Event.create(newEvent)
.then(data => {
console.log('data', data)
res.send(data)
})
.catch(err => console.log(err))
}
Когда я пытаюсь отправить изображение и данные в один объект, я получаю сообщение об ошибке на бэкэнде, потому что req.file не определен, когда я делаю это.
Что мне не хватает?