অক্ষরেখায় কোনও HTTP ত্রুটি থেকে আমি স্থিতি কোডটি কীভাবে পেতে পারি?


201

এটি মূ .় মনে হতে পারে, তবে যখন অক্ষরে অক্ষরে একটি অনুরোধ ব্যর্থ হয় তখন আমি ত্রুটি ডেটা পাওয়ার চেষ্টা করছি।

axios.get('foo.com')
    .then((response) => {})
    .catch((error) => {
        console.log(error) //Logs a string: Error: Request failed with status code 404
    })

স্ট্রিংয়ের পরিবর্তে, স্থিতি কোড এবং সামগ্রী সহ কোনও অবজেক্ট পাওয়া কি সম্ভব? উদাহরণ স্বরূপ:

Object = {status: 404, reason: 'Not found', body: '404 Not found'}

উত্তর:


364

আপনি যা দেখছেন তা হ'ল অবজেক্টের toStringপদ্ধতিতে ফিরে আসা স্ট্রিং error। ( errorএকটি স্ট্রিং নয়।)

যদি সার্ভারের কাছ থেকে কোনও প্রতিক্রিয়া পাওয়া যায় তবে errorঅবজেক্টটিতে বৈশিষ্ট্যটি থাকবে response:

axios.get('/foo')
  .catch(function (error) {
    if (error.response) {
      console.log(error.response.data);
      console.log(error.response.status);
      console.log(error.response.headers);
    }
  });

9
আমি যদি responseসম্পত্তিটি উল্লেখ না করি তবে আপনি কি এর পিছনের যাদুটি স্বয়ংক্রিয়ভাবে স্ট্রিংয়ে রূপান্তর করতে পারেন ?
সেবাস্তিয়ান ওলসেন

7
console.logঅবজেক্ট toStringফর্ম্যাট করতে পদ্ধতি ব্যবহার করে Errorresponseসম্পত্তির উল্লেখ করার সাথে এর কোনও যোগসূত্র নেই ।
নিক উরালটসেভ

2
আমি এখনও বিভ্রান্ত হয়ে পড়েছি, এটি ত্রুটিযুক্ত বস্তুর কাছে কি স্পেসিফিক বা না? যদি আমি কোনও বস্তুকে কনসোল.লগ করি তবে আমি স্ট্রিং নয়, বস্তুটি পাই।
সেবাস্তিয়ান ওলসেন

3
এটি বাস্তবায়নের উপর নির্ভর করে। উদাহরণস্বরূপ, node.js একটি বিশেষ কেস হিসাবে বস্তুর console.log পরিচালনা Error করে। এটি ব্রাউজারগুলিতে কীভাবে বাস্তবায়িত হয়েছিল তা আমি বলতে পারি না, তবে আপনি যদি কল করেন console.log({ foo: 'bar' });এবং console.log(new Error('foo'));Chrome DevTools কনসোলে, আপনি দেখতে পাবেন যে ফলাফলগুলি অন্যরকম দেখাচ্ছে।
নিক উরালটসেভ

5
অবশ্যই একটি নেটিভ জিনিস হতে হবে। যদিও এটি এখনও অদ্ভুত।
সেবাস্তিয়ান ওলসেন

17

@ নিক যেমন বলেছিল, আপনি যখন console.logজাভাস্ক্রিপ্টের Errorকোনও অবজেক্টের সঠিক প্রয়োগের উপর নির্ভর করেন তখন ফলাফল আপনি দেখতে পান console.logযা পরিবর্তিত হয় এবং (ইমো) ত্রুটিগুলি যাচাইয়ের জন্য অবিশ্বাস্যরূপে বিরক্ত করে তোলে।

আপনি যদি পদ্ধতিটি Errorবাইপাস করে পুরো অবজেক্ট এবং এটি বহন করে এমন সমস্ত তথ্য দেখতে চান তবে আপনি toString()কেবল JSON.stringify ব্যবহার করতে পারেন :

axios.get('/foo')
  .catch(function (error) {
    console.log(JSON.stringify(error))
  });

8

আমি এই ইন্টারসেপ্টরগুলি ত্রুটির প্রতিক্রিয়া পেতে ব্যবহার করছি।

const HttpClient = axios.create({
  baseURL: env.baseUrl,
});

HttpClient.interceptors.response.use((response) => {
  return response;
}, (error) => {
  return Promise.resolve({ error });
});

6

টাইপস্ক্রিপ্টের সাহায্যে সঠিক টাইপের সাহায্যে আপনি কী চান তা সন্ধান করা সহজ।

import { AxiosResponse, AxiosError } from 'axios'

axios.get('foo.com')
  .then(response: AxiosResponse => {
    // Handle response
  })
  .catch((reason: AxiosError) => {
    if (reason.response!.status === 400) {
      // Handle 400
    } else {
      // Handle else
    }
    console.log(reason.message)
  })

2

আপনি ...এটিকে নতুন কোনও বস্তুতে জোর করতে স্প্রেড অপারেটর ( ) ব্যবহার করতে পারেন :

axios.get('foo.com')
    .then((response) => {})
    .catch((error) => {
        console.log({...error}) 
})

সচেতন থাকুন: এটি ত্রুটির উদাহরণ হবে না।


1

এটি একটি পরিচিত বাগ, ব্যবহার করার চেষ্টা করুন "axios": "0.13.1"

https://github.com/mzabriskie/axios/issues/378

আমার একই সমস্যা ছিল তাই আমি ব্যবহার শেষ করেছিলাম "axios": "0.12.0"। এটা আমার জন্য ভালই কাজ করে।


1
এটি আমার একই সমস্যা নয়, আমি লগ করার সময় জড়িত কোনও বস্তুও নেইerror
সেবাস্তিয়ান ওলসেন

1

validateStatusঅনুরোধ কনফিগারেশন নামে একটি নতুন বিকল্প রয়েছে । আপনি যদি স্ট্যাটাস <100 বা স্থিতি> 300 (ডিফল্ট আচরণ) ব্যতিক্রম না ছুঁড়ে তা নির্দিষ্ট করতে আপনি এটি ব্যবহার করতে পারেন। উদাহরণ:

const {status} = axios.get('foo.com', {validateStatus: () => true})

0

আপনি ত্রুটিটি কোনও বস্তুর মধ্যে রাখতে পারেন এবং এই বস্তুকে লগ করতে পারেন:

axios.get('foo.com')
    .then((response) => {})
    .catch((error) => {
        console.log({error}) // this will log an empty object with an error property
    });

আশা করি এইখানে কেউ সাহায্য করবে।


0

সার্ভার থেকে HTTP স্থিতি কোডটি ফেরত পেতে, আপনি validateStatus: status => trueঅক্ষগুলি বিকল্পগুলিতে যুক্ত করতে পারেন :

axios({
    method: 'POST',
    url: 'http://localhost:3001/users/login',
    data: { username, password },
    validateStatus: () => true
}).then(res => {
    console.log(res.status);
});

এইভাবে, প্রতিটি HTTP প্রতিক্রিয়া অক্ষ থেকে ফিরে প্রতিশ্রুতি সমাধান করে।

https://github.com/axios/axios#handling-errors


0

এটি আমার কোড: আমার জন্য কাজ করুন

 var jsonData = request.body;
    var jsonParsed = JSON.parse(JSON.stringify(jsonData));

    // message_body = {
    //   "phone": "5511995001920",
    //   "body": "WhatsApp API on chat-api.com works good"
    // }

    axios.post(whatsapp_url, jsonParsed,validateStatus = true)
    .then((res) => {
      // console.log(`statusCode: ${res.statusCode}`)

            console.log(res.data)
        console.log(res.status);

        // var jsonData = res.body;
        // var jsonParsed = JSON.parse(JSON.stringify(jsonData));

        response.json("ok")
    })
    .catch((error) => {
      console.error(error)
        response.json("error")
    })
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.