nodejs 및 express로 만든 REST API에서 응답 상태 및 JSON 컨텐츠를 설정하는 올바른 방법 작성하여 표현합니다.

Nodejs를 가지고 놀고 작은 휴식 API를 작성하여 표현합니다. 내 질문은 응답 데이터뿐만 아니라 코드 상태를 설정하는 좋은 방법 / 최상의 방법은 무엇입니까?

약간의 코드로 설명하겠습니다 (노드를 넣지 않고 서버를 시작하는 데 필요한 코드를 표현할 것이며 관련된 라우터 방법 만 설명하겠습니다).

router.get('/users/:id', function(req, res, next) {
  var user = users.getUserById(req.params.id);
  res.json(user);
});


exports.getUserById = function(id) {
  for (var i = 0; i < users.length; i++) {
    if (users[i].id == id) return users[i];
  }
};

아래 코드는 완벽하게 작동하며 Postman으로 요청을 보낼 때 다음 결과를 얻습니다.
여기에 이미지 설명을 입력하십시오

보시다시피 상태는 200으로 표시되며 이는 정상입니다. 그러나 이것이 가장 좋은 방법입니까? 반환 된 JSON뿐만 아니라 상태를 직접 설정 해야하는 경우가 있습니까? 아니면 항상 급행으로 처리됩니까?

예를 들어 방금 빠른 테스트를 수행하고 위의 get 메소드를 약간 수정했습니다.

router.get('/users/:id', function(req, res, next) {
  var user = users.getUserById(req.params.id);
  if (user == null || user == 'undefined') {
    res.status(404);
  }
  res.json(user);
});

보시다시피, 배열에서 사용자를 찾지 못하면 상태를 404로 설정합니다.

이 주제에 대해 더 배우기위한 자료 / 조언은 환영합니다.



답변

Express API 참조는이 경우를 다룹니다.

statussend를 참조하십시오 .

즉, 당신은 단지 전화를해야 status호출하기 전에 방법을 json또는 send:

res.status(500).send({ error: "boo:(" });


답변

이런 식으로 할 수 있습니다.

res.status(400).json(json_response);

이것은 HTTP 상태 코드를 400으로 설정하며 Express 4에서도 작동합니다.


답변

사용하는 경우 (200)의 상태가 기본값이됩니다 res.send, res.json

당신은 같은 상태를 설정할 수 있습니다 res.status(500).json({ error: 'something is wrong' });

종종 나는 다음과 같은 일을 할 것입니다 …

router.get('/something', function(req, res, next) {
  // Some stuff here
  if(err) {
    res.status(500);
    return next(err);
  }
  // More stuff here
});

그런 다음 오류 미들웨어가 응답을 보내도록하고 오류가있을 때 수행해야 할 다른 작업을 수행하십시오.

또한 res.sendStatus(status)버전 4.9.0
부터 추가되었습니다 . http://expressjs.com/4x/api.html#res.sendStatus


답변

HTTP 상태 코드 목록

상태 응답에 대한 모범 사례는 실제 JSON 응답에 대해 오류 (성경)가 없지만 오류에 따라 적절한 HTTP 상태 코드를 전송하는 것입니다 (예 : 클라이언트 오류의 경우 4xx, 서버 오류의 경우 5xx). 성공적인 응답으로 루트 객체의 두 가지 속성으로 상태와 데이터를 다시 전송하는 방법 (클라이언트에게 HTTP 헤더 페이로드 자체 에서 상태를 캡처 할 수있는 기회를 제공함 )과 오류가 발생할 경우 사람이 이해할 수있는 방식으로 오류가 발생합니다.

Stripe의 API는 실제 환경에서 유사하게 작동합니다.

확인

200, {status: 200, data: [...]}

오류

400, {status: 400, data: null, message: "You must send foo and bar to baz..."}


답변

내 Express.js 응용 프로그램에서 이것을 사용하고 있습니다 :

app.get('/', function (req, res) {
    res.status(200).json({
        message: 'Welcome to the project-name api'
    });
});


답변

다음 속성을 포함하는 전체 HttpResponse를 얻는 표준 방법

  1. body // 데이터가 들어 있습니다
  2. 헤더
  3. 확인
  4. 상태
  5. statusText
  6. 유형
  7. url

백엔드 , 이렇게

router.post('/signup', (req, res, next) => {
    // res object have its own statusMessage property so utilize this
    res.statusText = 'Your have signed-up succesfully'
    return res.status(200).send('You are doing a great job')
})

프런트 엔드 예에서 Angular, 단지 수행

let url = `http://example.com/signup`
this.http.post(url, { profile: data }, {
    observe: 'response' // remember to add this, you'll get pure HttpResponse
}).subscribe(response => {
    console.log(response)
})


답변

res.status(500).jsonp(dataRes);