Я искал ответ на этот вопрос, но все, что я нашел, не сработало. В качестве внешнего интерфейса я использую React, а на своем сервере я использую psql для своей базы данных и node / express. Все данные, которые мне нужны, поступают и публикуются в моей базе данных, кроме моего заголовка и содержания.
У меня есть синтаксический анализатор данных формы - https://www.npmjs.com/package/express-form-data - который я использую. Он должен работать. В моей консоли я получаю undefined для заголовка и содержимого и пустой объект, когда console.log (req.body). Любая помощь будет оценена. Спасибо.
КОД ПЕРЕДНЕГО КОНЦА =
`submitForm = (form) => {form.preventDefault ();
let myForm = document.getElementById('form')
const formData = new FormData(myForm);
const request = {
method: 'POST',
body: formData,
};
const url = `${config.API_ENDPOINT}/videos`;
fetch(url, request)
.then(res => {
if (!res.ok) {
throw new Error('Sorry, something occurred when trying to upload - Please try your upload again.')
}
return res.json()
})
.then(data => {
this.setState({
status: 'Your video upload was successful! :thumbsup:',
})
})
.catch(error => {
console.log(error);
})
}
render() {
return (
<div>
<form onSubmit={(form) => this.submitForm(form)} id='form'>
<div className='row'>
<section className='column' id='column-1'>
<FaCloudUploadAlt id='upload-icon'/>
<div>
<h2 htmlFor='file' id='up-label'>Upload File.</h2>
<input accept='video/*' name='file' type='file' id='file' className='files'/>
</div>
</section>
<section className='column'>
<p htmlFor='title'>Video Title</p>
<input maxLength='40' onChange={(e) => this.onTitleChange(e)} type='text' id='title' placeholder='Your Video Title' required/>
<p htmlFor='description'>Video Description</p>
<textarea onChange={(e) => this.onContentChange(e)} id='description' className='' maxLength='140' placeholder='Your Video Description' required></textarea><br></br>
<button type='submit' className='upload-btn'>Upload Your Video</button>
</section>
</div>
</form>
</div>
)
}
}`
Код серверной части =
`require('dotenv').config();
const path = require('path');
const express = require('express');
const videosService = require('./videos-service');
const xss = require('xss');
const formData = require('express-form-data');
const { GcsFileUpload } = require('gcs-file-upload');
const fs = require('fs');
const videosRouter = express.Router();
const bodyParser = formData.parse();
//XSS
const serializeVideo = video => ({
id: video.id,
date_published: video.date_published,
title: video.title,
content: video.name,
rating: video.rating,
});
videosRouter
.route('/')
.get((req, res, next) => {
const knexInstance = req.app.get('db')
videosService.getAllVideos(knexInstance)
.then(video => {
res.json(video.map(serializeVideo))
})
.catch(next)
})
.post(bodyParser, (req, res, next) => {
let requestData = req.files.file.path;
const { title, content } = req.body;
console.log(title, content, 'i am title and content');
const myFile = fs.readFileSync(requestData);
const videoName = req.files.file.name;
const fileMetaData = {
originalname: videoName,
buffer: myFile
}
myBucket
.uploadFile(fileMetaData)
.then((data) => {
const newVideo = {
title: title,
content: content,
video_url: data
}
// console.log(newVideo, 'I am new video data');
videosService.insertVideos(
req.app.get('db'),
newVideo
)
res.send({status: "Success!"})
})
.catch((err) => {
console.log(err)
})
}) `