Vue.js Fetch выдает ответ 404 и api

Я не могу сделать POST-запрос в Vue.js. Это вызывало у меня проблемы с CORS, но я добавил

header('Access-Control-Allow-Origin: *');
header("Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, DELETE");

к API, и они ушли. Я могу получать действительные ответы от API с помощью Postman, используя тот же адрес электронной почты и пароль (Postman игнорирует CORS).

Вот мой запрос на получение:

<script>
export default {
data () {
    return {}
},
methods : {
    login : function () {
        console.info('Logging in');
        // axios({
        //     method : 'post',
        //     url : 'https://www.example.com/login',
        //     headers : {'content' : 'application/json'},
        //     data : {
        //         email : 'emailHere',
        //         password : 'passwordHere'
        //     }
        // })
        // .then(function (response) {
        //     console.info(response);
        // })
        // .catch(function (error) {
        //     console.info(error);
        // });

        fetch('https://www.example.com/login', {
            method: 'POST',
            body: JSON.stringify({
                email : 'emailHere',
                password : 'passwordHere'
            })
        })
        .then((res) => res.json())
        .then((data) => console.info(data))
        .catch((err) => console.error(err))

    }
}
}
</script>

https://www.example.com/api/v1/authenticate/login 404 (Not Found)
{status: false, message: "Invalid credentials"}

Я попробовал Axios, но все равно выдает 404, но не отвечает "Invalid Credentials".

В других приложениях я успешно использовал jquerys ajax с тем же API, поэтому API, похоже, разрешает запросы javascript. Но Fetch и Axios это не нравится.

У меня есть компонент Login.vue с кнопкой

<a id = "login-btn" @click.prevent = "login">{{ $t('loginPage.loginButtonText') }}</a>

Любая помощь будет оценена по достоинству! Спасибо!

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
2 922
1

Ответы 1

Вам не хватает заголовка Content-Type. Попробуйте установить заголовки в своем запросе. Fetch требует, чтобы вы явно задавали заголовки, поскольку это низкоуровневый API. Ваш сервер может отклонить, так как он не распознает соответствующий Content-Type. Попробуй это:

fetch('https://www.example.com/login', {
    method: 'POST',

    // THIS IS IMPORTANT
    headers: new Headers({
         'Content-Type': 'application/json',
         'Accept': 'application/json',
    }),

    body: JSON.stringify({
        email : 'emailHere',
        password : 'passwordHere'
    })
})

Также помните о двух вещах с fetch:

Первое получение 404 с помощью fetch не означает, что ваш запрос не удался. Если сервер отвечает на ошибку 4xx или 5xx, выборка считается успешной. Только при возникновении сетевой ошибки выборка отклоняется. Таким образом, если вы получаете 404, это означает, что запрос достиг сервера, но есть проблема на стороне клиента.

Во-вторых, попробуйте установить mode на corsв запросе получения. Думал, что значение mode по умолчанию - cors.

Спасибо за ответ! Пробовал и по отдельности, и вместе, дает другой ответ, но все равно 404.

Brian Barton 21.07.2018 23:12

Я включил jquery в индексный файл и сделал запрос POST с такими же параметрами. Он работал, как ожидалось, и вернул ответ с данными. $ .ajax ({url: 'example.com/login', тип: 'post', данные: {email: 'emailHere', пароль: 'passwordHere'}, успех: function (result) {console.info (result);}}) ;

Brian Barton 21.07.2018 23:20

Вот ответ на ваше предложение. Не удалось загрузить example.com/login: ответ для предварительной проверки имеет недопустимый код состояния HTTP 404. TypeError: не удалось получить.

Brian Barton 21.07.2018 23:29

@BrianBarton, это странно. Нужно подумать, почему это могло происходить.

Harshal Patil 23.07.2018 12:27

Есть другие мысли?

Brian Barton 25.07.2018 22:36

@BrianBarton, Ничего не могу предложить в данный момент. Вещи выглядят прекрасно.

Harshal Patil 28.07.2018 07:06

Другие вопросы по теме