相思资源网 Design By www.200059.com
一般开发过程中不不会根据httpcode来判断接口请求成功与失败的,而是会根据请求返回的数据,里面加上code字段
一、返回的数据格式对比
1、直接返回的数据格式
{
"id": 1,
"uuid": "cbbe7abc-b95e-48a0-8d24-b1ac93c45328",
"name": "哈士奇1",
"age": 12,
"color": null,
"createAt": "2019-07-25T09:13:30.000Z",
"updateAt": "2019-07-25T09:13:30.000Z"
}
2、我们自己包装后的返回数据
{
code: 0,
message: "请求成功",
data: {
"id": 1,
"uuid": "cbbe7abc-b95e-48a0-8d24-b1ac93c45328",
"name": "哈士奇1",
"age": 12,
"color": null,
"createAt": "2019-07-25T09:13:30.000Z",
"updateAt": "2019-07-25T09:13:30.000Z"
}
}
二、拦截全部的错误请求,统一返回格式
1、使用命令创建一个过滤器
nest g f filters/httpException
2、过滤器的代码
import {
ArgumentsHost,
Catch,
ExceptionFilter,
HttpException,
HttpStatus,
Logger,
} from '@nestjs/common';
@Catch(HttpException)
export class HttpExceptionFilter implements ExceptionFilter {
catch(exception: HttpException, host: ArgumentsHost) {
const ctx = host.switchToHttp();
const response = ctx.getResponse();
const request = ctx.getRequest();
const message = exception.message.message;
Logger.log('错误提示', message);
const errorResponse = {
data: {
error: message,
}, // 获取全部的错误信息
message: '请求失败',
code: 1, // 自定义code
url: request.originalUrl, // 错误的url地址
};
const status =
exception instanceof HttpException
"htmlcode">
...
import { HttpExceptionFilter } from './filters/http-exception.filter';
async function bootstrap() {
...
// 全局注册错误的过滤器
app.useGlobalFilters(new HttpExceptionFilter());
}
bootstrap();
4、测试,返回的错误信息
{
"statusCode": 400,
"error": "Bad Request",
"data": {
"message": [
{
"age": "必须的整数"
}
]
},
"message": '请求失败',
"code": 1,
"url": "/api/v1/cat"
}
三、统一请求成功的返回数据
1、创建一个拦截器src/interceptor/transform.interceptor.ts
2、拦截器的代码
import {
Injectable,
NestInterceptor,
CallHandler,
ExecutionContext,
} from '@nestjs/common';
import { map } from 'rxjs/operators';
import { Observable } from 'rxjs';
interface Response<T> {
data: T;
}
@Injectable()
export class TransformInterceptor<T>
implements NestInterceptor<T, Response<T {
intercept(
context: ExecutionContext,
next: CallHandler<T>,
): Observable<Response<T {
return next.handle().pipe(
map(data => {
return {
data,
code: 0,
message: '请求成功',
};
}),
);
}
}
3、全局注册
...
import { TransformInterceptor } from './interceptor/transform.interceptor';
async function bootstrap() {
...
// 全局注册拦截器
app.useGlobalInterceptors(new TransformInterceptor());
...
}
bootstrap();
4、测试返回数据
{
"data": {
"id": 1,
"uuid": "cbbe7abc-b95e-48a0-8d24-b1ac93c45328",
"name": "哈士奇1",
"age": 12,
"color": null,
"createAt": "2019-07-25T09:13:30.000Z",
"updateAt": "2019-07-25T09:13:30.000Z"
},
"code": 0,
"message": "请求成功"
}
相思资源网 Design By www.200059.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
相思资源网 Design By www.200059.com
暂无nestjs返回给前端数据格式的封装实现的评论...
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。