Ошибка 405 при получении запроса POST. Почему я не могу сделать запрос POST, когда запрос Get в порядке? - PullRequest
0 голосов
/ 23 апреля 2019

Я пытаюсь сделать POST-запрос к json blob api (это простой api для хранения моих JSON-файлов). И я получил ошибку 405 ...
Я не знаю, почему я не могу сделать POST-запрос, когда GOT-запрос работает нормально ..

Может кто-нибудь помочь мне, пожалуйста? https://jsonblob.com/api

   const api = "https://jsonblob.com/api/jsonBlob/c30c8afa-6557-11e9-acbe- 
   61e96b39ce8b"

    //it doesn't work
    fetch(api, {
        method: 'POST',
        body: JSON.stringify({
            name: 'dean',
            login: 'dean',
        })
    })
    .then(response => {
        if (response.ok) {
            return response.json()
        }
        throw new Error('Request failed!')
    })
    .then(jsonResponse => {
        console.log(jsonResponse)
    })
    .catch(error => {
        console.log('Request failure: ', error);
    });

   // get request works fine
   fetch(api).then((response) => {
        if (response.ok) {
            return response.json();
            console.log(response)
        }
        throw new Error('Request failed! ');
    })
    .then((Jsondata) => {
        console.log(Jsondata)
    })
    .catch(error => {
        console.log(error.message)
    });

Ответы [ 2 ]

0 голосов
/ 23 апреля 2019

Если вы читаете документацию для этого API, POST-запрос не принимает blobID в URL-адресе запроса - вам также нужно добавить заголовок запроса content-type со значением application/json - в противном случае вы получите ошибку 415

Возвращает идентификатор Blob ID в заголовке ответа x-jsonblob, поэтому, чтобы позже использовать заголовок Blob ID, вам потребуется доступ к заголовкам

const api = "https://jsonblob.com/api/jsonBlob"

fetch(api, {
    method: 'POST',
    body: JSON.stringify({
        name: 'dean',
        login: 'dean',
    }),
    // you also have to add this request header for that API
    headers: {
        'Content-Type': 'application/json'
    }
}).then(response => {
    if (response.ok) {
        const blobID = response.headers.get('x-jsonblob');
        console.log(`POST returned a blobID = ${blobID}`);
        // return the blobID we can use to fetch the data later
        return blobID;
    }
    throw new Error('POST Request failed!')
}).then(blobID => {
   // lets do a GET to see if we get the right data
   console.log(`fetch ${api}/${blobID}`);
   return fetch(`${api}/${blobID}`)
}).then((response) => {
    if (response.ok) {
        return response.json();
    }
    throw new Error('GET Request failed! ');
})
.then((Jsondata) => {
    console.log('Result of GET')
    console.log(Jsondata)
}).catch(error => {
    console.log('Request failure: ', error);
});
0 голосов
/ 23 апреля 2019

В соответствии с документацией этого API, вам нужно указать в заголовках тип контента json, это прекрасно работает:

fetch("https://jsonblob.com/api/jsonBlob", {
    method: 'POST',
    headers: {
      "Content-type": "application/json"
    },
    body: JSON.stringify({
        name: 'dean',
        login: 'dean',
    })
})
.then(response => {
    if (response.ok) {
        return response.json()
    }
    throw new Error('POST Request failed!')
})
.then(jsonResponse => {
    console.log(jsonResponse)
})
.catch(error => {
    console.log('POST Request failure: ', error);
});
...