ログイン画面の_react-native
_アプリケーションで、ユーザー名とパスワードの誤った組み合わせを入力した後、ユーザーに素敵なエラーメッセージを提供するように取り組んでいます。 APIと対話するには、ライブラリAxiosを使用しています。ただし、catch
ステートメントでエラーが発生すると、「未処理のプロミス拒否」があり、コンポーネントの状態を設定したり、新しいページに移動したりできないなど、この醜いエラーメッセージが表示されます。
私は何が間違っているのかわかりません。ドキュメントで見た例とまったく同じように見えます。
私のフォーム送信関数には、次の機能があります。
_axios.post('http://192.168.1.11:1337/login', {
email: this.state.username,
password: this.state.password
}).then(function (response) {
// This stuff all seems to work great
console.log("The response we got: ", response);
if (response.status == 200) {
console.log("Status code equals 200");
Actions.homepage();
}
}).catch(function (err) {
// Run into big problems when I get an error
console.log("Got an error logging in, here's the message: ", err);
});
_
誰かが私がここで間違っていることを見ることができますか?
P.S。これは、サーバーから取得したエラーメッセージです。これは、そのconsole.log("Got an error logging in, here's the message: ", err);
からログに記録されます。
_"Got an error logging in, here's the message:"
{ [Error: Request failed with status code 401]
config:
{ transformRequest: { '0': [Function: transformRequest] },
transformResponse: { '0': [Function: transformResponse] },
headers:
{ Accept: 'application/json, text/plain, */*',
'Content-Type': 'application/json;charset=utf-8' },
timeout: 0,
xsrfCookieName: 'XSRF-TOKEN',
xsrfHeaderName: 'X-XSRF-TOKEN',
maxContentLength: -1,
validateStatus: [Function: validateStatus],
method: 'post',
url: 'http://192.168.1.11:1337/login',
data: '{"email":"[email protected]","password":"dddddd"}' },
response:
{ data: { message: 'Invalid password', user: false },
status: 401,
statusText: undefined,
headers:
{ map:
{ connection: [ 'keep-alive' ],
date: [ 'Thu, 31 Aug 2017 23:30:21 GMT' ],
'x-powered-by': [ 'Sails <sailsjs.org>' ],
vary: [ 'X-HTTP-Method-Override' ],
'content-length': [ '52' ],
'access-control-allow-credentials': [ '' ],
'access-control-allow-Origin': [ '' ],
etag: [ 'W/"34-Ymi4isRxuJ6jE1EIS+AQag"' ],
'access-control-allow-methods': [ '' ],
'access-control-allow-headers': [ '' ],
'access-control-expose-headers': [ '' ],
'content-type': [ 'application/json; charset=utf-8' ] } },
config:
{ transformRequest: { '0': [Function: transformRequest] },
transformResponse: { '0': [Function: transformResponse] },
headers:
{ Accept: 'application/json, text/plain, */*',
'Content-Type': 'application/json;charset=utf-8' },
timeout: 0,
xsrfCookieName: 'XSRF-TOKEN',
xsrfHeaderName: 'X-XSRF-TOKEN',
maxContentLength: -1,
validateStatus: [Function: validateStatus],
method: 'post',
url: 'http://192.168.1.11:1337/login',
data: '{"email":"[email protected]","password":"dddddd"}' },
request:
{ url: 'http://192.168.1.11:1337/login',
credentials: 'omit',
headers:
{ map:
{ accept: [ 'application/json, text/plain, */*' ],
'content-type': [ 'application/json;charset=utf-8' ] } },
method: 'POST',
mode: null,
referrer: null,
_bodyInit: '{"email":"[email protected]","password":"dddddd"}',
_bodyText: '{"email":"[email protected]","password":"dddddd"}',
bodyUsed: true } } }
_
Androidエミュレータ(Samsung Galaxy S7をエミュレート))での表示のスクリーンショットは次のとおりです。
このスニペットに問題はありません。
興味深い部分は、未処理の約束拒否エラーが発生する理由です。しかし、これは別の場所でスローされます。したがって、より多くのコードを提供する必要があります。
編集:おそらく、あなたはあなたのaxiosの約束を呼び出し関数に返す必要があるだけでしょうか?