Express 및 Node를 사용하여 API를 구축합니다.회사 명

API 노드에 대한 HTTP 요청 불면증 테스트 사용


이전 글에서 우리는 Node를 사용하여 하나를 구축하기 시작했다 API.js와 Express, 데이터베이스를 읽고 쓸 수 있습니다.
웹 브라우저를 사용하여 읽기 동작을 쉽게 테스트하는 방법을 알고 있습니다. 읽기는 웹 브라우저가 기본적으로 실행하는 GET 요청과 관련이 있기 때문입니다.
그러나 더 복잡한 상황에 직면했을 때, 예를 들어 우리가 POST 요청을 실행하고 데이터를 API 단점으로 전달해야 한다면, 우리는 더욱 적합한 HTTP 클라이언트를 사용하여 테스트를 간소화하기를 희망할 수 있다.
이 목적에 사용할 수 있는 다른 도구가 있지만, 우리의 예시에서 우리는 불면증more details here을 사용한다.불면증은 REST 클라이언트로 HTTP 에 쉽게 API 요청을 보내고 응답 상세 정보를 볼 수 있습니다.
불면증을 설치한 후 백엔드 응용 프로그램이 정상적으로 작동하고 예상대로 GET 에서 데이터를 돌려받을 수 있도록 localhost:4000/toys 요청 API 을 보냅니다.
우리는 GET 방법을 선택하고 URLlocalhost:4000/toys을 입력하는 새 요청을 만듭니다.
우리는 반드시 모든 장난감의 명세서를 되찾아야 한다.

데이터베이스에 쓰기


너무 좋아요.이것은 실행할 수 있다.이것들이 있으면 최신 버전의 코드를 테스트해 달라고 실제적으로 요청합시다.
기억하고 계신다면, 이전 글에서, 새 장난감을 추가하기 위해 포트를 만들었습니다.
우리는 같은 URL을 사용합니다: POST. 그러나 이번에는 localhost:4000/toys 동사로 선택했습니다.우리는 POST 형식의 새로운 장난감 이름을 단점에 전달해야 한다.
불면증의 한 부분은 우리가 요청에 데이터를 추가할 수 있도록 허용한다HTTP.보낼 형식으로 JSON 를 선택하고 body 기호에 JSON 로 보낼 장난감 이름을 입력하면 다음과 같습니다.
{
  "name": "Beetle"
}
이 방법이 있으면 우리는 클릭해서 보내기만 하면 된다.이것이 바로 우리가 얻은 보답이다.

잠깐만, 이것은 우리가 바라는 것이 아니야!
우리는 새로운 장난감이 데이터베이스에 추가되고 응답을 성공적으로 되돌려 주기를 원하지만, 우리는 오류를 얻었다.무슨 문제가 생겼습니까?
여기에서 클라이언트 디버깅 코드를 사용하는 장점을 볼 수 있습니다.이런 상황에서 우리는 오류를 얻었을 뿐만 아니라, 오류 정보는 우리에게 어떻게 이 문제를 디버깅하기 시작하는지에 대한 단서를 제공했다.
만약 당신이 알아차렸다면, 불면증자는 JSON 상태 코드를 받았다.이것은 Express가 API 방법에서 이 점을 해야 한다고 알려주었기 때문이다.
.catch(err => {
  res.status(500).json({ err })
})
또한 Express에서 실제 오류를 반환한다고 알려주었기 때문에 오류는 HTTP 객체로 변환되어 다음과 같이 표시됩니다.
{
  "err": {
    "errno": 21,
    "code": "SQLITE_MISUSE"
  }
}
우리가 데이터베이스에 데이터를 추가하려고 시도할 때, 이 오류는 데이터베이스 호출 자체와 직접적으로 관련이 있기 때문에 의외의 상황이 발생한 것 같다.아마도 우리는 데이터베이스에서 기대하는 것을 보내지 않았습니까?
먼저 실제 데이터베이스에 전송된 내용을 봅시다.우리는 데이터베이스에 정확한 데이터를 보내고 있는지 확인하기 위해 500 호출을 추가할 수 있습니다.
server.post('/toys', (req, res) => {
  const toyInfo = req.body;

  console.log("toyInfo:", toyInfo)   // <-- For debugging

  // ...
}
여기에서 요청server.post에서 추출JSON을 한 후 검사를 진행합니다.장난감 이름이 있을 거예요. 그렇죠?console.log 문장을 추가한 후에 다른 요청을 드리겠습니다.
우리는 여전히 불면증 속에서 같은 오류를 만날 수 있지만, 지금 우리가 서버 컨트롤러를 보면 인쇄된 것을 볼 수 있다.
toyInfo: undefined
이것은 오류의 발생을 증명했다. 왜냐하면 이때toyInfo가 실제로body이기 때문이다.그런데 왜죠?

서버 중간부품


요청을 받았을 때 Express는 이를 console.log 대상으로 저장합니다.이것은 데이터베이스에 직접 보내기에 적합하지 않다.우리의 예에서 데이터베이스는 문자열이 필요합니다. 데이터베이스에 보내기 전에 toyInfo 대상을 변환해야 합니다.
우리는 어떻게 이런 전환을 진행합니까?Express는 여기서 도움을 줄 수 있는 방법이 있습니다. 중간부품이라는 개념을 사용했습니다.
잠시 후에 나는 중간부품을 더욱 상세하게 소개할 것이지만, 지금 우리는 서버에 중간부품을 추가하는 방법을 말해야만 한다.이 방법은 데이터를 변환하여 undefined 대상에 저장하기 때문에 데이터베이스에 안전하게 전송할 수 있다.
우리의 코드에서 단점을 정의하기 전에 코드에 중간부품을 추가하여 모든 단점이 자동으로 사용할 수 있도록 해야 한다.
우리가 추가한 방법은 JSON 함수이며, 이 함수는 전송된 모든 요청에서 실행됩니다.JSON에 전달되는 함수는 request 이며, server.use() 대상을 문자열로 변환합니다.
server.use(express.json());

// ... route handler code below
만약 우리가 지금 불면증 환자server.use()에게 또 다른 요청을 한다면, 우리는 오류가 이미 사라졌고 예상한 호응을 얻었음을 확인할 수 있다.

이 응답은 저희가 보낸 데이터와 데이터베이스에 추가된 다른 정보, 예를 들어 프로젝트express.json()와 창설 날짜를 포함합니다.
{
  "toy": {
    "id": 5,
    "name": "Beetle",
    "created_at": "2019-11-18 15:53:26",
    "updated_at": "2019-11-18 15:53:26"
  }
}
또한 서버 콘솔을 보면 JSON 이 더 이상 API 이 아니라 요청ID에서 전달된 데이터로 설정되어 있음을 알 수 있습니다.
toyInfo: { name: 'Beetle' }
예!우리의 새 장난감은 이미 데이터베이스에 정확하게 추가되었습니다!
지금 우리는 새로운 장난감이 하나 생겼다. 우리는 좀 놀았다. 만약 우리가 피곤하면 그것을 벗어나고 싶을까?
우리는 앞으로 글에서 자원을 삭제하는 데 사용할 단점을 추가하는 방법을 볼 것이다.
나는 매일 웹 개발에 관한 글을 쓴다.만약 당신이 이 글을 좋아한다면, 언제든지 당신의 친구와 동료와 공유하세요.
subscribing to my newsletter 를 통해 받은 편지함에서 유사한 글을 받을 수 있습니다.

좋은 웹페이지 즐겨찾기