Wpis z mikrobloga

#webdev #node #react

Probuje sobie lokalnie zahostowac prosty JSON api, ktory bedzie wylacznie odczytywany i uzyc go w react-native przy pomocy axios.

Kroki ktore robie:
Sciagam gotowe juz API, robie swoj plik api.json.
Servuje go w express.js:

app.get('/', (req, res) => {
fs.readFile('./public/api.json', (err, data) => {
if (err) return console.log(err);

res.json(JSON.parse(data.toString()));
})
});

Jak wejde pod url przegladarki czyli 127.0.0.1:8080 lub localhost:8080 to widze identycznie moj json tak jak z servera ktory sciagnalem. Oba servery maja status 200, ale jak odswieze moj to dostaje status 304, a na originalnym zostaje 200. Na obu Type: Document.

Teraz jak linkuje ten nie-moj server do reacta, uzywajac Axios, to dziala wszystko fajnie, ale jak to robie z moim to dostaje error

componentWillMount() {
axios.get('http://127.0.0.1:8080/')
.then((res) => {
console.log(JSON.stringify(res.data));
})
}

Possible Unhandled Promise Rejection (id: 0):
Network Error
Error: Network Error

Co probuje osiagnac: sklonowac zaserwowany JSON ale lokalnie i statycznie, originalny robi zapytania do bazy mysql, ja chce miec statyczny plik.

Co robie zle?
  • 4
@Melcma: nie wiem, czy cokolwiek robisz źle ( ͡° ͜ʖ ͡°)

Z tego co widzę w dokumentacji axiosa, to tam w parametrze odpowiadającym za konfigurację jest "validateStatus", które zwraca błąd jeśli status nie mieści się w przedziale 200 - 300. Podejrzewam, że to u Ciebie go może powodować. Możesz zatem zmienić zapytanie wysyłane przez axios na coś w tym stylu:

axios({
method: 'get',
url: 'localhost:8080',
validateStatus: function
@oMatej: nie dziala, sprobowalem cos takiego wyslac: res.status(200).json({message: 'hi'});
za pierwszym razem jest status 200, a jak odswiezam to 304 juz, no wtf

edit: dodalem cos takiego: app.disable('etag'); i status tym razem jest zawsze 200, ale i tak zwraca mi unhandled promise rejection w axios