Как отправить тело на экспресс приложение с fetch - PullRequest
0 голосов
/ 23 мая 2019

Я пытаюсь опубликовать форму с использованием JavaScript на конечной точке экспресс-API

import express from 'express';
import path from 'path';
import cookieParser from 'cookie-parser';
import logger from 'morgan';
import dotenv from 'dotenv';
import validator from 'express-validator';
import cors from 'cors';

import indexRouter from './routes/index';

dotenv.config();
const app = express();

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use(validator());
app.use(cors());

app.use('/', indexRouter);

export default app;

Вот мой обработчик событий формы

signin_form.addEventListener('submit', e => {
    e.preventDefault();
    const email = document.getElementById('signin_email').value;
    const password = document.getElementById('signin_password').value;
    console.log('SIGN IN', email, password);

    const body = { email, password };
    console.log(body);

    const options = {
        method: 'POST',
        body,
        headers: { 
            'Access-Control-Allow-Origin': '*',
            'Content-Type': 'application/x-www-form-urlencoded',
        },
    };
    fetch(signinEndpoint, options)
        .then(response => response.json())
        .then(resp => {
            console.log('response ', resp);
        });
});

Когда я отправляю форму напрямую методом действия, все работает нормально. Но когда я пытаюсь обработать событие отправки самостоятельно, отправленное письмо и пароль всегда возвращают неопределенное.

Я попробовал почти все предложения здесь на SO. Я использовал FormData(). Когда я регистрирую req.body на своей консоли, я получаю

   '"email"\r\n\r\nperson@gmail.com\r\n-----------------------------3902153292\r\nContent-Disposition: form-data; name="password"\r\n\r\ngaatatra\r\n-----------------------------3902153292--\r\n' }

Если я пытаюсь использовать 'Content-Type': 'application/json', браузер выдает cors жалоб.

Если я использую JSON.stringify(body), console.log возвращает { '{"email":"person@gmail.com","password":"taeatertrt"}': '' }

Любая помощь будет оценена.

1 Ответ

0 голосов
/ 23 мая 2019

Почему бы не использовать 'Content-Type': 'application/json' вместо этого?не забудьте использовать body: JSON.stringify(body) перед отправкой данных

...