Mam plik JSON, z którego chcę czytać i pisać, który wygląda tak:

[
    "test@example.com"
]

Chcę dodać informacje do tego pliku za pomocą interfejsu API fetch(). Na razie mogę tylko czytać z tego pliku.

let handle = JSON.stringify(`test@example2.com`); // handle is fine irrelevant of "" or ``
const url = `../json/emails.json`; // URL is fine
const options = {
    method: `POST`, // PUT return error at second fetch: SyntaxError: "JSON.parse: unexpected character at line 1 column 1 of the JSON data"
    headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json'
    },
    body: handle
};

fetch(url) // this fetch is fine
    .then(response => {
        if (!response.ok) {
            throw new Error(`Error getting the stuff`);
        }
        return response;
    })
    .then(r => r.json())
    .then(data => {
        console.log(`Data: ` + data);
    });

fetch(url, options)
    .then(response => {
        if (!response.ok) {
            throw new Error(`Error getting the stuff`);
        }
        return response;
    })
    .then(a => a.json())
    .then(append => {
        console.log(`Data updated: ` + append);
    }).catch(err => {
        console.error('Request failed: ', err);
    });

Nie otrzymuję żadnych błędów (oprócz komentarza PUT); ESLint i TSLint nie mają żadnego problemu z plikiem JS ani z plikiem JSON. Co ja robię źle?

0
user10608273 8 listopad 2018, 13:28

1 odpowiedź

Najlepsza odpowiedź

fetch() to interfejs API do wykonywania żądań HTTP.

Nie może zapisywać do plików. W szczególności nic nie może pisać do dowolnych adresów URL. (Wyobraź sobie, że każda przeglądarka może zapisywać nowe dane do http://www.google.com/!)

Jeśli chcesz, aby Twoje żądanie PUT lub POST zmieniało dane na Twoim serwerze, musisz napisać kod po stronie serwera, aby przetworzyć żądanie i edytować plik.

5
Quentin 8 listopad 2018, 13:32