Nodejs 新手求教 nest.js 的问题
刚入门 nest.js 请问各位大佬,在 nest.js 中如何处理返回字段。和 java 中 VO 一样,写一些 VO 的类,用于处理返回的接口字段以及过滤掉未定义的字段。
网上找了好多,都没有类似的答案。
就比如数据库中查出来的字段有很多,但是最后我需要过滤一层再返回给前端,如果通过判断或者解构一层再组装每个都需要处理,感觉很乱,我希望通过 DTO 类似的方式,用 JAVA 中应该是 VO 。直接过滤掉不匹配的值。
有大佬能给个示范或者提供文章一下
Nodejs 新手求教 nest.js 的问题
巧了我刚看的一个项目就是用的 dto
https://github.com/azerothcore/acore-api/blob/master/src/auth/auth.controller.ts
(’/signin’)
async signIn(
() accountDto: AccountDto,
() response: Response,
): Promise<void> {
return this.authService.signIn(accountDto, response);
}
#2 这个好像是过滤 request 的,我再找找看
从数据库中查就可以直接过滤返回字段呀,比如 mongodb ,就可以填过滤参数呀。
db_users.find({“uid”: 1001}, {“password”: 0, “uid”: 1})
看来用 nestjs 的还是有一些的,同用 nestjs 。
你们 nestjs 应用有部署在 cloudflare or vercel 吗?
应该是 serialization ,参考官方文档 或者看看这个
https://stackoverflow.com/questions/50360101/how-to-exclude-entity-field-from-returned-by-controller-json-nestjs-typeorm
可以做到,我之前是用响应拦截器里获取响应的对象类型,去读装饰器的标记过滤。
在实体类上用装饰器通过元信息标注哪一些字段需要过滤,在中间件中遍历响应体检查其元信息删除不需要的字段。
有没有参考示例,刚入门还不是特别了解。但是你说的大致意思我明白。对于传入参数原本是通过创建自定义的管道,然后在全局进行绑定,这样就能通过 class-validator 进行 DTO 类型字段的校验。但是我不知道如何进行删除。transform(value, { metatype })只有这两个参数。value 是客户端传入的值,但是我不知道从哪里获取 DTO 类的值。原本是打算获取 DTO 的对象值,然后两个进行遍历,若 value 中的值不存在 DTO 上就删除掉。但是现在困扰在了 DTO 上的值不知道怎么获取。另外传出参数应该也是一样。能否给个示例
这个方式是数据库出来的时候就已经排除了。但是有些情况是我可能在服务层还需要对这些数据进行使用.我希望在返回给客户端期间,增加一个步骤,用于将返回的字段和我定义的 VO 类进行比较,然后返回 VO 类中的的字段
能否给我个示例子。刚入门,对与很多 API 或者使用方式还不太了解,了解不够深,所以有点不知道怎么处理。
#14 这个不是 数据库出来就排除的,你可以验证一下。class-transformer 只是处理 serialize 的行为,对象属性还是可以访问的
那我说错了,不过我更希望能够在返回阶段对数据进行处理。因为这样的话个人感觉更加灵活。请问返回阶段处理 DTO 字段的示例么?
可以像 java 一样写 VO 啊用 ClassSerializerInterceptor ,Vo 类使用 Exclude ,属性使用 Expose
当然,很高兴能帮助你了解 NestJS,这是一个基于 Node.js 的强大框架,用于构建高效、可靠和可扩展的服务器端应用程序。如果你是 Node.js 新手,那么 NestJS 的模块化设计和丰富的功能可能会让你觉得既兴奋又有挑战。
首先,确保你已经安装了 Node.js 和 npm(Node 包管理器)。然后,你可以通过以下步骤创建一个新的 NestJS 项目:
-
全局安装 Nest CLI:
npm i -g [@nestjs](/user/nestjs)/cli
-
创建一个新项目:
nest new project-name cd project-name
-
启动开发服务器:
npm run start
此时,你应该能够在浏览器中访问 http://localhost:3000/
并看到一个欢迎页面。
NestJS 强调模块化,每个模块可以包含控制器、服务、存储库等。下面是一个简单的控制器示例,用于处理 HTTP 请求:
import { Controller, Get } from '[@nestjs](/user/nestjs)/common';
@Controller('hello')
export class HelloController {
@Get()
sayHello(): string {
return 'Hello World!';
}
}
将这个控制器添加到你的模块中(通常是 app.module.ts
),然后重新启动服务器,访问 http://localhost:3000/hello
应该会看到 “Hello World!” 的输出。
这只是 NestJS 功能的冰山一角,建议查阅 官方文档 以获取更多详细信息和高级用法。祝你学习愉快!