x1ongzhu 1 年間 前
コミット
357916858c

+ 16 - 6
src/filters/all-exceptions-filter.filter.ts

@@ -1,4 +1,12 @@
-import { ExceptionFilter, Catch, ArgumentsHost, HttpException, HttpStatus, Logger } from '@nestjs/common'
+import {
+    ExceptionFilter,
+    Catch,
+    ArgumentsHost,
+    HttpException,
+    HttpStatus,
+    Logger,
+    ServiceUnavailableException
+} from '@nestjs/common'
 import { HttpAdapterHost } from '@nestjs/core'
 import { HttpAdapterHost } from '@nestjs/core'
 
 
 @Catch()
 @Catch()
@@ -25,11 +33,13 @@ export class AllExceptionsFilter implements ExceptionFilter {
                 res.message = res.message.join()
                 res.message = res.message.join()
             }
             }
         }
         }
-        Logger.error(
-            `status=${httpStatus}, path=${path}, msg=${res.message}`,
-            (exception as any).stack,
-            'GlobalExceptionFilter'
-        )
+        if (!(exception instanceof ServiceUnavailableException)) {
+            Logger.error(
+                `status=${httpStatus}, path=${path}, msg=${res.message}`,
+                (exception as any).stack,
+                'GlobalExceptionFilter'
+            )
+        }
         if (!(exception instanceof HttpException)) {
         if (!(exception instanceof HttpException)) {
             console.trace(exception)
             console.trace(exception)
         }
         }

+ 9 - 3
src/rcs-number/rcs-number.service.ts

@@ -1,5 +1,5 @@
 import { mwze167 } from './impl/mwze167.service'
 import { mwze167 } from './impl/mwze167.service'
-import { forwardRef, Inject, Injectable, ServiceUnavailableException } from '@nestjs/common'
+import { forwardRef, Inject, Injectable, Logger, ServiceUnavailableException } from '@nestjs/common'
 import { InjectRepository } from '@nestjs/typeorm'
 import { InjectRepository } from '@nestjs/typeorm'
 import { RcsNumber, RcsNumberSource, RcsNumberStatus } from './entities/rcs-number.entity'
 import { RcsNumber, RcsNumberSource, RcsNumberStatus } from './entities/rcs-number.entity'
 import { PageRequest } from '../common/dto/page-request'
 import { PageRequest } from '../common/dto/page-request'
@@ -14,7 +14,7 @@ import { addMinutes } from 'date-fns'
 import { durian } from './impl/durian.service'
 import { durian } from './impl/durian.service'
 import * as AsyncLock from 'async-lock'
 import * as AsyncLock from 'async-lock'
 import { checkAndFormatNumber, matchOperator } from './helpers'
 import { checkAndFormatNumber, matchOperator } from './helpers'
-import { GetNumberService } from './impl/get-number-service'
+import { GetNumberResponse, GetNumberService } from './impl/get-number-service'
 import { ChannelService } from '../channel/channel.service'
 import { ChannelService } from '../channel/channel.service'
 import { i18nvc } from './impl/i18nvc.service'
 import { i18nvc } from './impl/i18nvc.service'
 import { firefox } from './impl/firefox.service'
 import { firefox } from './impl/firefox.service'
@@ -152,7 +152,13 @@ export class RcsNumberService {
             default:
             default:
                 throw new ServiceUnavailableException('不支持的短信通道')
                 throw new ServiceUnavailableException('不支持的短信通道')
         }
         }
-        const res = await numberService.getNumber(operatorConfig.country)
+        var res: GetNumberResponse
+        try {
+            res = await numberService.getNumber(operatorConfig.country)
+        } catch (e) {
+            Logger.error(`${operatorConfig.country} - ${numberService.source}\t ${e.message}`, 'GetNumber')
+            throw new ServiceUnavailableException(e.message)
+        }
         const rawNumber = res.number
         const rawNumber = res.number
         res.number = checkAndFormatNumber(operatorConfig.country, res.number, res.operatorName)
         res.number = checkAndFormatNumber(operatorConfig.country, res.number, res.operatorName)
         const mapTo = matchOperator(res.operatorCode, operatorConfig)
         const mapTo = matchOperator(res.operatorCode, operatorConfig)