글로벌 예외 처리
절단면 프로그래밍
예외 처리는 다음과 같습니다.
알려진 오류: 전방 요청 데이터 형식 검사 오류 등 알 수 없는 오류: 코드 문법 오류, 환경 오류 등
알 수 있는 오류: 모델 층에 아래에 표시된 이상 오류 클래스를 도입하여 업무 수요에 따라 지정한 오류 클래스를 제거한 다음 전역적으로 이상 차단 처리를 하고 클라이언트로 돌아갑니다
201: 조회 성공 200: 제출 성공 403: 접근 금지 참조: 디지털 코드 설정 응답 상태 성명된 이상 오류 클래스 참조:
class HttpException extends Error{
constructor(msg=' ',errorCode=10000, code=400){
super()
this.errorCode = errorCode
this.code = code
this.msg = msg
}
}
class Success extends HttpException{
constructor(msg, errorCode){
super()
this.code = 201
this.msg = msg || 'ok'
this.errorCode = errorCode || 0
}
}
class AuthFailed extends HttpException {
constructor(msg, errorCode) {
super()
this.msg = msg || ' '
this.errorCode = errorCode || 10004
this.code = 401
}
}
클라이언트 예외 반환 형식:
ctx.body = {
msg:error.msg,
error_code:error.errorCode,
request:`${ctx.method} ${ctx.path}`
}
ctx.status = error.code
models 계층에서 선언된 예외 오류 클래스를 도입합니다.
class User extends Model {
static async verifyEmailPassword(email, plainPassword) {
const user = await User.findOne({
where: {
email
}
})
if (!user) {
throw new global.errs.AuthFailed(' ')
}
// user.password === plainPassword
const correct = bcrypt.compareSync(
plainPassword, user.password)
if(!correct){
throw new global.errs.AuthFailed(' ')
}
return user
}
static async getUserByOpenid(openid){
const user = await User.findOne({
where:{
openid
}
})
return user
}
static async registerByOpenid(openid) {
return await User.create({
openid
})
}
}
전역 예외 처리 차단: (중간부품 Middlewares)
const {HttpException} = require('../core/http-exception')
const catchError = async (ctx, next)=>{
try {
await next()
} catch (error) {
//
//
// HttpException
const isHttpException = error instanceof HttpException
const isDev = global.config.environment === 'dev'
if(isDev && !isHttpException){
throw error
}
if(isHttpException){
ctx.body = {
msg:error.msg,
error_code:error.errorCode,
request:`${ctx.method} ${ctx.path}`
}
ctx.status = error.code
}
else{
ctx.body = {
msg: 'we made a mistake O(∩_∩)O~~',
error_code: 999,
request:`${ctx.method} ${ctx.path}`
}
ctx.status = 500
}
}
}
module.exports = catchError
글로벌 예외 처리 주입:
app.use(catchError)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.