[英]Network Request Failed - React Native
所以无缘无故,我无法从本地服务器读取任何 json 数据。 日志 cat 中没有消息表明出现问题。
这就是我正在做的事情。 我首先启动本地主机服务器
json-server --watch db.json -p 3001 -d 2000
然后把它拿回来,这很好。
\{^_^}/ hi!
Loading db.json
Done
Resources
http://localhost:3001/dishes
http://localhost:3001/comments
http://localhost:3001/promotions
http://localhost:3001/leaders
http://localhost:3001/feedback
Home
http://localhost:3001
接下来,我启动 react native app npm run android
并在模拟器中看到这个。
我将基本网址声明为:
export const baseUrl ='http://IP_GOES_HERE:3001/';
我的IP地址没有改变。
这是我的提取文件。
import * as ActionTypes from './ActionTypes';
import { baseUrl } from '../shared/baseUrl';
export const fetchComments = () => (dispatch) => {
return fetch(baseUrl + 'comments')
.then(response => {
if (response.ok) {
return response;
} else {
var error = new Error('Error ' + response.status + ': ' + response.statusText);
error.response = response;
throw error;
}
},
error => {
var errmess = new Error(error.message);
throw errmess;
})
.then(response => response.json())
.then(comments => dispatch(addComments(comments)))
.catch(error => dispatch(commentsFailed(error.message)));
};
export const commentsFailed = (errmess) => ({
type: ActionTypes.COMMENTS_FAILED,
payload: errmess
});
export const addComments = (comments) => ({
type: ActionTypes.ADD_COMMENTS,
payload: comments
});
export const fetchDishes = () => (dispatch) => {
dispatch(dishesLoading());
return fetch(baseUrl + 'dishes')
.then(response => {
if (response.ok) {
return response;
} else {
var error = new Error('Error ' + response.status + ': ' + response.statusText);
error.response = response;
throw error;
}
},
error => {
var errmess = new Error(error.message);
throw errmess;
})
.then(response => response.json())
.then(dishes => dispatch(addDishes(dishes)))
.catch(error => dispatch(dishesFailed(error.message)));
};
export const dishesLoading = () => ({
type: ActionTypes.DISHES_LOADING
});
export const dishesFailed = (errmess) => ({
type: ActionTypes.DISHES_FAILED,
payload: errmess
});
export const addDishes = (dishes) => ({
type: ActionTypes.ADD_DISHES,
payload: dishes
});
export const fetchPromos = () => (dispatch) => {
dispatch(promosLoading());
return fetch(baseUrl + 'promotions')
.then(response => {
if (response.ok) {
return response;
} else {
var error = new Error('Error ' + response.status + ': ' + response.statusText);
error.response = response;
throw error;
}
},
error => {
var errmess = new Error(error.message);
throw errmess;
})
.then(response => response.json())
.then(promos => dispatch(addPromos(promos)))
.catch(error => dispatch(promosFailed(error.message)));
};
export const promosLoading = () => ({
type: ActionTypes.PROMOS_LOADING
});
export const promosFailed = (errmess) => ({
type: ActionTypes.PROMOS_FAILED,
payload: errmess
});
export const addPromos = (promos) => ({
type: ActionTypes.ADD_PROMOS,
payload: promos
});
export const fetchLeaders = () => (dispatch) => {
dispatch(leadersLoading());
return fetch(baseUrl + 'leaders')
.then(response => {
if (response.ok) {
return response;
} else {
var error = new Error('Error ' + response.status + ': ' + response.statusText);
error.response = response;
throw error;
}
},
error => {
var errmess = new Error(error.message);
throw errmess;
})
.then(response => response.json())
.then(leaders => dispatch(addLeaders(leaders)))
.catch(error => dispatch(leadersFailed(error.message)));
};
export const leadersLoading = () => ({
type: ActionTypes.LEADERS_LOADING
});
export const leadersFailed = (errmess) => ({
type: ActionTypes.LEADERS_FAILED,
payload: errmess
});
export const addLeaders = (leaders) => ({
type: ActionTypes.ADD_LEADERS,
payload: leaders
});
export const postFavorite = (dishId) => (dispatch) => {
setTimeout(() => {
dispatch(addFavorite(dishId));
}, 2000);
}
export const addFavorite = (dishId) => ({
type: ActionTypes.ADD_FAVORITE,
payload: dishId
});
export const addComment = (comment) => ({
type: ActionTypes.ADD_COMMENT,
payload: comment
});
export const postComment = (dishId, rating, comment, author) => (dispatch) => {
const newComment = {
dishId: dishId,
rating: rating,
author: author,
comment: comment
};
newComment.date = new Date().toISOString();
return fetch(baseUrl + 'comments', {
method: 'POST',
body: JSON.stringify(newComment),
headers: {
"Content-Type": "application/json"
},
credentials: "same-origin"
})
.then(response => {
if(response.ok) {
return response;
} else {
var error = new Error('Error' + response.status + ': ' + response.statusText);
error.response = response;
throw error;
}
},
error => {
throw error;
})
.then(response => response.json())
.then(response => setTimeout(() => {dispatch(addComment(response))}, 2000))
.catch(error => { console.log('post comments', errorr.message); alert('Your comment cannot be posted\nError: ' + error.message); });
};
一切都很好。 为什么我会得到这个? 我清理了项目,但仍然没有
./gradlew clean
谢谢,西奥。
问题可能是您的 json-server 正在localhost:3001
提供数据,但 android 模拟器的 localhost 与您计算机的 localhost 不同。
您需要让 json-server 在您的本地 IP 地址上提供数据,以便移动设备可以通过 LAN 访问它。 您可以通过在命令行上输入主机 IP 地址来完成此操作。
代替:
json-server --watch db.json -p 3001
用:
json-server --watch db.json -p 3001 -H [your_local_IP]
然后您的手机就可以通过 LAN 访问数据。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.