Express에서 오류 처리 프로그램의 중간부품을 어떻게 사용합니까?js 및 타자 스크립트
26448 단어 nodetypescriptapiexpress

Express의 오류 처리 절차란 무엇입니까?js?
Express의 오류 처리 프로그램js는 실행 중 발생하는 오류를 포획하고 처리합니다.기본값은 Express입니다.js는 기본적으로 내장된 것을 제공합니다.
Express에서 오류 처리 프로그램이 어떻게 작동하는지js?
서버에 오류가 발생할 때마다 사용자 정의 오류 처리 프로그램이 없으면 Express를 사용하십시오.js는 오류를 포착하고 기본 오류 처리 프로그램을 사용하여 클라이언트에게 오류 메시지가 있는 응답을 보냅니다.원인이 명확하다.js는 모든 오류를 포착하는 데 급급합니다. 오류를 정확하게 처리해야 할 뿐만 아니라, 프로그램이 다시 실행된 후에 사용하지 않은 자원을 정확하게 비워야 합니다.
다시 말하면 표현.js는 서버 메모리 유출을 방지하고 함수에서 API 노드 요청을 처리한 후 스팸 수집 대상을 정확하게 처리합니다.
우리는 하나의 예로 해석합시다.간단한 API 끝점에 처리 함수를 첨부했다고 가정합니다.
app.get('/car/model', function (req: express.Request, res: express.Response) {
const car = { model: 'Santa Fe', year: 2010, brand: 'Hyundai' };
res.send(`The car model is ${car.model}`); });
자동차 모형으로 정보를 되돌려 주는 것 외에 지금 벌어지고 있는 일들을 더욱 깊이 있게 살펴보자.우리는 카의 대상을 포함하는 카의 변수를 만들었다.변수를 만들 때마다 우리는 메모리 공간을 분배합니다.일단 우리가 고객에게 회답을 보내면, 우리는 더 이상 카 변수를 필요로 하지 않는다.그러나 이론적으로 카 변수는 여전히 메모리 공간을 사용한다.
이것은 우리가 클라이언트에게 응답을 보낼 때마다 메모리를 불러오는 것을 의미합니까?
잘못 처리하면 그렇습니다.우리는 메모리 공간을 부정확하게 방출함으로써 메모리 공간을 줄인다.다시 말하면 이것이 바로 우리가 말한 메모리 유출이다.
하지만!급행 열차.js는 기본 오류 처리 프로그램을 사용하여 메모리 유출 문제로 인한 어려움을 방지합니다.
오류 처리 프로그램은 메모리 유출을 방지하는 것과 어떤 관계가 있습니까?
오류 처리 프로그램이 Express를 어떻게 돕는지 알아보기.js 응용 프로그램의 붕괴를 방지하기 위해서, 우리는 먼저 노드가 어떻게 작동하는지 알아야 한다.js 엔진이 정상적으로 작동합니다.
만약 네가 모른다면, 노드.js 사용V8 engine.V8 엔진은 내장된 쓰레기 수집기를 제공하여 메모리 공간을 관리함으로써 성능을 향상시키고 개발자의 추가 작업을 줄였다.
V8 엔진을 사용하여 쓰레기 수집을 하는 방법에 대해 깊이 있게 알고 싶으시다면read the article written on the V8 engine website 권장합니다.요컨대 V8 엔진은 메모리를 죽은 메모리나 활성 메모리로 확정한다. 이는 메모리 공간을 사용하면 활성 메모리라는 것을 의미한다.만약 다시 사용하지 않는다면 그것은 죽을 것이다.그 사망 상태의 사람들은 쓰레기 수집을 할 자격이 있다.
단순 처리 함수를 사용하는 API 끝점 예로 돌아가면 해당 함수의 역할 영역이 제한되어 있음을 알 수 있습니다.일단 우리가 클라이언트에 응답을 보내면 함수와 그 어떠한 작용역 변수도 더 이상 사용하지 않을 것이다. 이것은 V8 스팸 수집 엔진의 요구에 부합된다.
처리 함수에서 오류를 적용하는 경우(예:
app.get('/car/model', function (req: express.Request, res: express.Response) {
const car = { model: 'Santa Fe', year: 2010, brand: 'Hyundai' };
// forcing to trigger an error
car.model();
res.send(`The car model is ${car.model}`);
});
오류 처리 프로그램이 없으면 클라이언트가 처음부터 응답을 받지 못할 것이다.또한 '마운트' 를 요청합니다. 이것은 우리의 처리 함수가 활성 메모리를 사용한다는 것을 의미합니다.이 메모리가 활성 상태이기 때문에 V8 엔진 스팸 수집이 작동하지 않아 서버 메모리가 누출됩니다.Express를 사용하는 데 문제가 있습니까?js 기본 오류 처리 프로그램?
기본 오류 처리 프로그램에 문제가 없습니다.그러나 일부 개념을 이해하는 것은 너에게 매우 중요하다.만약 우리가 앞의 코드 예시를 사용하여 수동으로 오류를 촉발한다고 가정한다면.나는 당신이 단점에 요청을 하도록 격려합니다.당신은 잘못된 응답을 받을 것입니다. 이것은 예상한 것입니다.
그러나 이 오류 응답은 사용자에게 좋지 않습니다.그것은 API의 폴더 구조와 같은 서버에 대한 창고 정보를 제공하는 상당히 기술화되었다.개발 단계에서 오류를 제거하면 이 정보는 유익하지만 생산 환경에서 이런 상황이 발생하면 위험하다.
다행히도 급행열차.js는 생산 단계에서 민감한 정보를 잘못 표시하는 것을 방지할 수 있습니다.이를 위해서는 express 프로그램을 만들기 전에 NODE ENV var을 "production"으로 설정해야 합니다.
사용자 정의 오류 처리 프로그램을 왜 실현합니까?
사용자 정의 오류 처리 프로그램을 실행하려는 이유가 다를 수 있습니다.예를 들어, 생산 단계에서 NODE ENV를 프로덕션으로 설정하지 않은 항목도 있습니다.잘못 처리하면 시스템에 대한 민감한 정보가 유출될 수 있다.
의외의 오류가 발생할 때 특정한 오류 대상 형식을 보내야 하는 항목도 있습니다.
Express에서 사용자 정의 오류 처리 프로그램을 작성하는 방법js에서 TypeScript를 사용합니까?
오류 처리 프로그램의 중간부품의 작업 원리는 다른 중간부품과 매우 비슷하다.하지만 몇 가지 고려해야 할 것이 있다.
응용 프로그램 레벨이나 루트 레벨의 중간부품을 개발할 때handler 함수는 Request,Response,NextFunction 세 가지 인자를 받아야 한다.사용자 정의 프로세서 오류를 개발하는 경우 프로세서 함수에는 네 개의 매개 변수가 있어야 한다.ErrorRequestHandler, Request, Response 및 NextFunction.
사용자 정의 오류 처리 프로그램을 계속 만듭니다.우리의 예에서, 우리는 서버가 특정 프로세스를 수행할 수 없는 원인에 대한 의미 있는 정보를 클라이언트에 제공하기 위해 사용자 정의 오류 메시지를 보내기를 희망합니다.하나의 예는 클라이언트가 보낸 전자 표 기록을 읽는 것입니다. 특정한 열의 잘못된 데이터 형식을 포함합니다.따라서 첫 번째 단계는 CustomError 객체를 작성하는 것입니다.
1. CustomError 객체 만들기
우선 사용자 정의 오류를 만듭니다.모델ts 파일은 다음 폴더 위치에 있습니다: src/api/models.창설 후, 우리는 하나의 종류를 생성하여 내보낼 것입니다.
export class CustomError {
message!: string;
status!: number;
additionalInfo!: any;
constructor(message: string, status: number = 500, additionalInfo: any = {}) {
this.message = message;
this.status = status;
this.additionalInfo = additionalInfo
}
}
2. 사용자 정의 오류 처리 프로그램 중간부품 만들기
error handler라는 파일을 만듭니다.중간부품.ts는 src/api/middleware 폴더에 있습니다.생성되면 다음 논리를 추가합니다.
import { Request, Response, NextFunction } from 'express';
import { CustomError } from './../models/custom-error.model';
/**
* Custom error handler to standardize error objects returned to
* the client
*
* @param err Error caught by Express.js
* @param req Request object provided by Express
* @param res Response object provided by Express
* @param next NextFunction function provided by Express
*/
function handleError(
err: TypeError | CustomError,
req: Request,
res: Response,
next: NextFunction
) {
let customError = err;
if (!(err instanceof CustomError)) {
customError = new CustomError(
'Oh no, this is embarrasing. We are having troubles my friend'
);
}
// we are not using the next function to prvent from triggering
// the default error-handler. However, make sure you are sending a
// response to client to prevent memory leaks in case you decide to
// NOT use, like in this example, the NextFunction .i.e., next(new Error())
res.status((customError as CustomError).status).send(customError);
};
export default handleError;
3. 사용자 정의 오류 처리 프로그램을 마지막으로 사용할 중간부품으로 추가
색인을 엽니다.ts 파일.그리고 사용자 정의 프로세서를 가져와 마지막 중간부품으로 프로그램에 추가합니다.마지막 프로그램을 사용해야 한다는 얘기다.오류 처리 프로그램의 중간부분에 사용됩니다.Learn How to Use TypeScript With Node.js and Express.js 시리즈를 보고 있다면 색인을 입력하십시오.ts 파일은 다음과 같습니다.
import express from 'express';
import compression from 'compression';
import helmet from 'helmet';
import bodyParser from 'body-parser';
import cors from 'cors';
import { generateToken } from './api/utils/jwt.utils';
import routes from './api/routes';
import logger from './api/middlewares/logger.middleware';
import errorHandler from './api/middlewares/error-handler.middleware';
const app = express();
const port = 3000;
// Only generate a token for lower level environments
if (process.env.NODE_ENV !== 'production') {
console.log('JWT', generateToken());
}
// compresses all the responses
app.use(compression());
// adding set of security middlewares
app.use(helmet());
// parse incoming request body and append data to `req.body`
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
// enable all CORS request
app.use(cors());
// add logger middleware
app.use(logger);
app.use('/api/', routes);
// add custom error handler middleware as the last middleware
app.use(errorHandler);
app.listen(port, () => {
console.log(`Example app listening at http://localhost:${port}`)
});
4. 사용자 정의 프로세서 테스트
먼저, API 끝점의 함수 처리 프로그램을 강제로 실행하는 중 오류가 발생했습니다.우리의 예에서, 우리는 팀의 getTeams 함수를 수정할 것이다.제어기.ts 파일.
export const getTeams = (req: Request, res: Response) => {
const test = {};
//@ts-ignore
test.nonExistingMethod();
res.send(TEAMS);
};
PORT/api/teams/에 요청하면 다음과 같은 오류 대상이 발생합니다.
{
"message": "Oh no, this is embarrasing. We are having troubles my friend",
"status": 500,
"additionalInfo": {}
}
이제 CustomError 객체를 사용하고 함수 프로세서에서 CustomError 인스턴스를 내보냅니다.
import { Request, Response } from 'express';
import { CustomError } from './../models/custom-error.model';
const TEAMS = [
{ id: 1, name: 'Real Madrid', league: 'La Liga' },
{ id: 2, name: 'Barcelona', league: 'La Liga' },
{ id: 3, name: 'Manchester United', league: 'Premier League' },
{ id: 4, name: 'Liverpool', league: 'Premier League' },
{ id: 5, name: 'Arsenal', league: 'Premier League' },
{ id: 6, name: 'Inter', league: 'Serie A' },
{ id: 7, name: 'Milan', league: 'Serie A' },
{ id: 8, name: 'Juventus', league: 'Serie A' },
];
export const getTeams = (req: Request, res: Response) => {
throw new CustomError('forgot something?', 400, 'you can do better than that');
res.send(TEAMS);
};
예상되는 오류 객체 결과는 다음과 같습니다.
{
"message": "forgot something?",
"status": 400,
"additionalInfo": "you can do better than that"
}
Reference
이 문제에 관하여(Express에서 오류 처리 프로그램의 중간부품을 어떻게 사용합니까?js 및 타자 스크립트), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/arealesramirez/how-to-use-error-handler-middleware-with-express-js-and-typescript-431n텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)