だから私は React Native アプリを持っており、fetch() ネイティブ API を介して自分の外部 API を呼び出しています。リクエストが fetch() によって 1 つのコンテキストのみで正しく処理されないという奇妙な問題が発生しています。
呼び出しはに POST することになっ/api/token_login
ています。
アプリで電話をかける方法は次のとおりです。
#/src/services/post.js
import headers from './headers';
const APIURL = '******/api';
export default async (path, data, callback) => {
try {
const postData = {
method: 'POST',
credentials: 'include',
headers: new Headers(headers),
body: JSON.stringify(data)
};
const requestURL = `${APIURL}/${path}`;
const request = new Request(requestURL, postData);
const response = await fetch(request);
const res = await response.text();
if (response.ok) {
callback(null, res);
} else {
const error = res;
callback(error, null);
}
} catch (error) {
console.log('caught error: ', error);
}
};
#/src/services/auth.js
import post from './post';
export function TokenLogin(data, callback) {
post('token_login', data, callback);
}
...other functions
#/src/containers/Login.js
const data = {
user: {
auth_token: token,
},
};
return TokenLogin(data, (err, response) => {
const res = JSON.parse(response);
... do stuff
};
この関数は、特定の条件下で componentDidMount で呼び出されます。これは予想される動作です。ただし、ほぼ毎日、渡されたパスへのリクエストの送信が突然停止し、代わりに /api/login に GET が送信されます。関数に渡されたパスを変更すると、動作が期待されるものに戻ります (つまり、パスを渡すと、ボディが正しく渡された状態でflurgl
POST 要求が送信されます.../api/flurgl
。デバッグ情報は次のとおりです。
// the logs:
=> Request method: POST url: https://*****/api/token_auth
=> Response object:
=> Response {type: "default", status: 404, ok: false, statusText: undefined, headers: Headers, …}
bodyUsed: true
headers: Headers {map: {…}}
ok: false
status: 404
statusText: undefined
type: "default"
url: "https://*******/api/login"