본문 바로가기
개발/에러해결

spawn app crashed : 에러 메시지 없는 에러 잡기

by amkorousagi 2023. 5. 15.

spawn app crashed : 에러 메시지 없는 에러 잡기

 

 

spawn app crashed 에러 내용


node express에서는 크게 동기 에러와 비동기 에러가 있습니다.

이는 다음과 같이 각각 error handler와 wrapping을 통해 잡을 수 있습니다.

...

app.use(handlingError);

...


export const handlingError = (err, req, res, next) => {
  let httpCode = StatusCodes.INTERNAL_SERVER_ERROR;
  let data = {
    success: false,
    data: {},
    error: err.name,
    message: err.message,
    detail: err.stack,
  };
  logger.error(err.stack);
  res.status(httpCode).json(data);
};

 

export function errorHandler(cb) {
  return function (req, res, next) {
    cb(req, res, next).catch(next); // promise라서 .catch 가능
  };
}

export function responseHandler(service) {
  return errorHandler(async (req, res, next) => {
    const result = await service(req, res, next);
    if (req.sendErrorWithoutLog != true) {
      res.status(StatusCodes.OK).json({
        success: true,
        data: result ?? {},
        error: "",
        errorDetails: [],
        message: "",
      });
    }
  });
}



createLectureRoute.post(
  "/",
  responseHandler(async (req) => {
    const { lecturer, title, semester } = req.body;
    console.log(req.body);
    // 유효성 검증 , id..

    return await createLecture({ lecturer, title, semester });
  })
);

 

그러나 이로서는 잡을수 없는 에러도 있습니다.

 

spawn app crashed 에러 원인


 

spawn으로 생성된 다른(자식) 프로세스로 부터 기인한 에러이기 때문에 일반적인 에러 파이프라인에 속하지 않기 때문입니다.

 

spawn app crashed 해결 방법


이는 다음과 같이 자식 프로세스가 보내는 signal이나 event로 잡을 수 있습니다.

process.on("uncaughtException", (exception) => {
  logger.error(exception.stack);
});
process.once("SIGUSR2", function () {
  gracefulShutdown(function () {
    process.kill(process.pid, "SIGUSR2");
  });
});

 

참고 자료


 

 

Process | Node.js v20.1.0 Documentation

Process# Source Code: lib/process.js The process object provides information about, and control over, the current Node.js process. import process from 'node:process';const process = require('node:process');copy Process events# The process object is an inst

nodejs.org

 

댓글