Feathers.js 요청 ID 미들웨어

프로젝트 준비


  • 앱을 생성합니다(기존 앱이 없는 경우)here을 참조하십시오. 기본적으로 생성기를 다음과 함께 설치해야 합니다. npm install @feathersjs/cli -g
  • 앱 생성 페이지에서 단계별 절차를 따를 수 있습니다. 참고 사항: 저는 코드베이스에 Typescript를 사용합니다.

  • 미들웨어 생성 및 작성


  • 사용 feathers generate middleware . 여기에서 미들웨어를 생성하는 방법을 확인할 수 있습니다.


  • 요청 ID로 uuidv4를 사용하고 싶습니다. 따라서 uuid 사용: npm install uuid @types/uuid 또는 yarn install uuid @types/uuid(yarn을 사용하는 경우)를 설치하십시오.
  • 미들웨어를 작성합니다. feathers 객체에 requestId를 넣습니다. src/middleware/request-id.ts에서 파일을 찾을 수 있습니다.

  • import { v4 as uuidv4 } from 'uuid';
    import { Request, Response, NextFunction } from 'express';
    
    export default () => {
      // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/explicit-module-boundary-types
      return (req: Request, res: Response, next: NextFunction) => {
        const requestId= uuidv4();
        if (!req.feathers) {
          req.feathers = {};
        }
        req.feathers.requestId = requestId;
        next();
      };
    };
    


  • 캡처를 위해 로그 후크를 업데이트합니다requestId. src/hooks/log.ts를 업데이트합니다.

  • // A hook that logs service method before, after and error
    // See https://github.com/winstonjs/winston for documentation
    // about the logger.
    import logger from '../logger';
    import util from 'util';
    import { HookContext, Hook } from '@feathersjs/feathers';
    
    // To see more detailed messages, uncomment the following line:
    logger.level = 'debug';
    
    export default function (): Hook {
      return (context: HookContext) => {
        const { params } = context;
        const requestId = params.requestId;
        logger.debug(`Request Id: ${requestId}`);
        // This debugs the service call and a stringified version of the hook context
        // You can customize the message (and logger) to your needs
        logger.debug(
          `${context.type} app.service('${context.path}').${context.method}()`,
        );
    
        if (
          // eslint-disable-next-line @typescript-eslint/no-explicit-any
          typeof (context as any).toJSON === 'function' &&
          logger.level === 'debug'
        ) {
          logger.debug('Hook Context', util.inspect(context, { colors: false }));
        }
    
        if (context.error && !context.result) {
          logger.error(context.error.stack);
        }
      };
    }
    



  • 오류 처리기를 사용하고 요청 ID를 가져오고 싶습니다. 먼저 오류 처리기에 대한 html 출력을 비활성화합니다. HTML 출력을 처리하고 싶지 않기 때문입니다. 이와 같이 src/app.ts를 업데이트할 수 있습니다.

  • // another code...
    
    // Configure a middleware for 404s and the error handler
    app.use(express.notFound());
    app.use(express.errorHandler({ html: false }));
    
    app.hooks(appHooks);
    
    export default app;
    


  • 응용 프로그램 전체 오류 후크를 생성합니다. 아래 그림을 볼 수 있습니다. 자세한 내용은. 확인할 수 있습니다this.


  • 후크를 작성합니다. src/hooks/common-error.ts에서 찾을 수 있습니다.

  • // Use this hook to manipulate incoming or outgoing data.
    // For more information on hooks see: http://docs.feathersjs.com/api/hooks.html
    import { Hook, HookContext } from '@feathersjs/feathers';
    
    // eslint-disable-next-line @typescript-eslint/no-unused-vars
    export default (options = {}): Hook => {
      return async (context: HookContext): Promise<HookContext> => {
        if (context.error) {
          console.log(context);
          const { params } = context;
          const requestId = params.requestId;
          const requestIdObject = {
            requestId,
          };
          context.error.errors = Object.assign(
            context.error.errors,
            requestIdObject,
          );
        }
        return context;
      };
    };
    


  • 작성하고 나면 다음과 같은 오류 속성 아래에 requestId가 표시됩니다. 이렇게 하면 오류를 추적하는 데 도움이 됩니다.



  • 고맙습니다



    그게 다야 다른 제안이 있다면. 여기에 댓글을 달아주세요.

    고맙습니다. :)

    좋은 웹페이지 즐겨찾기