Запрос пустого тела - express - PullRequest
0 голосов
/ 28 мая 2020

Я искал ответ на этот вопрос, но все, что я нашел, не сработало. В качестве внешнего интерфейса я использую 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)
      })

}) `

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...