>source

노드에서 http 요청을 수행하는 동안 오류가 발생했습니다. 다음과 같은 코드를 사용하는 동안 오류가 발생합니다.

다음 코드처럼 시도했습니다.

const http = require('http')
class postalData {
 async getPostData(pinCode){
  let result = new Promise((resolve, reject) => {
    http.get('http://postalpincode.in/api/pincode/' + pinCode,(res)=>{
      let data = '';
      // A chunk of data has been recieved.
      res.on('data', (chunk) => {
        data += chunk;
      });
      // The whole response has been received. Print out the result.
      res.on('end', () => {
        resolve(JSON.parse(data).explanation);
      });
    }).on("error", (err) => {
      reject(err.message);
    });  
  })
  const newLocal = await result
  return newLocal
 }
}
const getData = new postalData()
console.log('Post data : ', getData.getPostData(400705))

노드에서 http 요청을 수행하는 동안 아래 오류가 발생합니다. 다음과 같은 코드를 사용하는 동안 오류가 발생합니다. 아래와 같이 :

undefined:1
<head><title>Document Moved</title></head>
^
SyntaxError: Unexpected token < in JSON at position 0
    at JSON.parse (<anonymous>)
    at IncomingMessage.<anonymous> (/home/rahul/indian-post/a.js:23:22)
    at IncomingMessage.emit (events.js:327:22)
    at endReadableNT (_stream_readable.js:1201:12)
    at processTicksAndRejections (internal/process/task_queues.js:84:21)

내 예상 출력 :

{
   "Message":"Number of Post office(s) found: 1",
   "Status":"Success",
   "PostOffice":[
      {
         "Name":"Sanpada",
         "Description":"",
         "BranchType":"Sub Post Office",
         "DeliveryStatus":"Delivery",
         "Taluk":"NA",
         "Circle":"NA",
         "District":"Thane",
         "Division":"New Mumbai",
         "Region":"Mumbai",
         "State":"Maharashtra",
         "Country":"India"
      }
   ]
}


  • 답변 # 1

    일반 http 호출을 사용하려고하는데 서버가 redirect (문서 이동 됨). 마디 http 리디렉션을 따르지 않으므로 리디렉션을 위해 HTML로 응답합니다.

    당신이 사용할 수있는 request 리디렉션을 따르기위한 패키지 또는 다음과 같은 더 간단한 패키지 follow-redirects . 노드에 대한 드롭 인 교체를 제공합니다. http 리디렉션을 따릅니다.

    편집 : 외부 라이브러리를 사용하지 않으려면 응답 헤더와 statusCode를 다음과 같이 확인하십시오. request 하다:

    if (response.statusCode >= 300 && response.statusCode < 400 && response.headers['location']) { /* retry the http request at the location */ }
    
    

  • 답변 # 2

    요청 http://postalpincode.in/api/pincode/400705 결과 301 Moved Permanently 헤더로 응답 Location: http://www.postalpincode.in/api/pincode/400705 리소스를 사용할 수 있음을 알려줍니다. http://www.postalpincode.in/api/pincode/400705 .

    열면 http://postalpincode.in/api/pincode/400705 브라우저에서 자동으로 처리합니다. 301 응답하고 주어진 위치를 엽니 다.

    그만큼 http 노드의 모듈은 그렇게하지 않고 실제 응답을 제공합니다. http 기준 치수)

    해당 모듈을 사용하려면 리디렉션을 따르거나 다음과 같은 라이브러리를 사용하는 자체 로직을 작성해야합니다. request 이러한 리디렉션을 따르는 옵션을 제공합니다.

    당신은 확인해야합니다 response.statusCode 만약 그렇다면 301 또는 302 , 필요한 경우 Location 헤더 사용 response.getHeader(name) 을 클릭하고 요청을 재발행하십시오. 새 응답에 대해 다른 리디렉션이 발생하는 경우 동일한 작업을 수행해야합니다.

관련 자료

  • 이전 javascript - xml보기에서 valuestate를 사용하는 방법>
  • 다음 ruby on rails - 보기 버튼 클릭에서 행을 업데이트하는 방법