Express.js를 사용하여 HTTP 오류 코드를 지정하는 방법은 무엇입니까?
시도해 본 결과:
app.get('/', function(req, res, next) {
var e = new Error('error message');
e.status = 400;
next(e);
});
그리고:
app.get('/', function(req, res, next) {
res.statusCode = 400;
var e = new Error('error message');
next(e);
});
그러나 항상 500의 오류 코드가 표시됩니다.
Express(버전 4+) 문서에 따라 다음을 사용할 수 있습니다.
res.status(400);
res.send('None shall pass');
http://expressjs.com/4x/api.html#res.status
<=3.8
res.statusCode = 401;
res.send('None shall pass');
단순한 하나의 라이너;
res.status(404).send("Oh uh, something went wrong");
다음과 같은 방법으로 오류 응답을 중앙 집중화하고 싶습니다.
app.get('/test', function(req, res){
throw {status: 500, message: 'detailed message'};
});
app.use(function (err, req, res, next) {
res.status(err.status || 500).json({status: err.status, message: err.message})
});
따라서 오류 출력 형식은 항상 동일합니다.
PS: 물론 다음과 같은 표준 오류를 확장하는 개체를 만들 수 있습니다.
const AppError = require('./lib/app-error');
app.get('/test', function(req, res){
throw new AppError('Detail Message', 500)
});
'use strict';
module.exports = function AppError(message, httpStatus) {
Error.captureStackTrace(this, this.constructor);
this.name = this.constructor.name;
this.message = message;
this.status = httpStatus;
};
require('util').inherits(module.exports, Error);
사용할 수 있습니다.res.send('OMG :(', 404);
그저.res.send(404);
익스프레스 4.0에서 그들은 그것을 맞췄습니다 :)
res.sendStatus(statusCode)
// Sets the response HTTP status code to statusCode and send its string representation as the response body.
res.sendStatus(200); // equivalent to res.status(200).send('OK')
res.sendStatus(403); // equivalent to res.status(403).send('Forbidden')
res.sendStatus(404); // equivalent to res.status(404).send('Not Found')
res.sendStatus(500); // equivalent to res.status(500).send('Internal Server Error')
//If an unsupported status code is specified, the HTTP status is still set to statusCode and the string version of the code is sent as the response body.
res.sendStatus(2000); // equivalent to res.status(2000).send('2000')
Express 4.0에서 본 바로는 이것은 저에게 적합합니다.다음은 인증에 필요한 미들웨어의 예입니다.
function apiDemandLoggedIn(req, res, next) {
// if user is authenticated in the session, carry on
console.log('isAuth', req.isAuthenticated(), req.user);
if (req.isAuthenticated())
return next();
// If not return 401 response which means unauthroized.
var err = new Error();
err.status = 401;
next(err);
}
일부(아마도 이전 버전의) express와 함께 번들된 errorHandler 미들웨어 버전에 상태 코드가 하드 코딩된 것 같습니다.여기에 문서화된 버전: http://www.senchalabs.org/connect/errorHandler.html 에서는 원하는 작업을 수행할 수 있습니다.따라서 최신 버전의 express/connect로 업그레이드를 시도해 볼 수 있습니다.
나는 노력했다.
res.status(400);
res.send('message');
...하지만 그것은 나에게 오류를 주었습니다.
(노드:208) 처리되지 않은 약속거부 경고: 오류:헤더를 보낸 후에는 헤더를 설정할 수 없습니다.
나를 위한 이 일
res.status(400).send(yourMessage);
오래된 질문이지만, 여전히 구글에서 나오고 있습니다.현재 버전의 Express(3.4.0)에서는 next(err)를 호출하기 전에 res.statusCode를 변경할 수 있습니다.
res.statusCode = 404;
next(new Error('File not found'));
사용되지 않는 익스프레스res.send(body, status)
.
사용하다res.status(status).send(body)
또는res.sendStatus(status)
대신
문자열 표현 없이 상태 코드를 보내려면 다음을 수행할 수 있습니다.
res.status(200).send();
저는 붐 패키지를 사용하여 http 오류 코드 전송을 처리하는 것을 추천합니다.
비동기식:
myNodeJs.processAsync(pays)
.then((result) => {
myLog.logger.info('API 200 OK');
res.statusCode = 200;
res.json(result);
myLog.logger.response(result);
})
.fail((error) => {
if (error instanceof myTypes.types.MyError) {
log.logger.info(`My Custom Error:${error.toString()}`);
res.statusCode = 400;
res.json(error);
} else {
log.logger.error(error);
res.statusCode = 500;
// it seems standard errors do not go properly into json by themselves
res.json({
name: error.name,
message: error.message
});
}
log.logger.response(error);
})
.done();
언급URL : https://stackoverflow.com/questions/10563644/how-to-specify-http-error-code-using-express-js
'programing' 카테고리의 다른 글
OSX의 홈브루에서 "cannot load the file --utils/open"을 방지하는 방법 (0) | 2023.05.31 |
---|---|
탐색 모음 표시/숨기기 (0) | 2023.05.31 |
MS Excel에서 열지 않고 Excel 파일의 VBA 매크로(또는 vbaProject.bin) 읽기 (0) | 2023.05.31 |
루비의 더블콜론::는? (0) | 2023.05.31 |
Excel 문제 "excel 4.0 함수가 정의된 이름으로 저장됨" (0) | 2023.05.31 |