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 참조는이 경우를 다룹니다.
즉, 당신은 단지 전화를해야 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를 얻는 표준 방법
- body // 데이터가 들어 있습니다
- 헤더
- 확인
- 상태
- statusText
- 유형
- 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);