小编Gre*_*mas的帖子

中间件、防护程序、拦截器、管道、过滤器等之间的精确执行顺序是什么?

NestJS 包含许多工具,这些工具似乎充当中间件的特殊版本,例如防护程序、拦截器和过滤器。

所有这些之间的执行顺序是什么?

我的理解是执行顺序是这样的:

中间件 -> 守卫 -> 拦截器 -> 管道 -> 控制器 -> 拦截器 ->res.on('finish')在中间件中设置的处理程序

javascript middleware node.js nestjs

7
推荐指数
1
解决办法
6026
查看次数

使用 @nestjs/mongoose 时如何向 Mongoose 模式添加实例/静态方法?(打字稿问题)

使用 vanilla Mongoose 时,可以直接向 Mongoose schemas 添加方法。Mongoose 文档很好地解决了这个问题,并且可以找到几个示例。

但是当您在 Nest 应用程序的上下文中使用 Mongoose 时呢?我希望我的 Mongoose 模式更像“Nest”,所以我使用了 Mongoose ( @nestjs/mongoose)的 Nest 包装器。但是,@nestjs/mongoose似乎缺少的文档。我能找到的与任何文档最接近的内容是在 Nest 应用程序中使用 MongoDB 的指南,其中仅包括 Mongoose 最绝对的基本用例。

在我看来,Mongoose 在 Nest 世界中的使用方式与 vanilla Mongoose 使用的方式大不相同。也许这只是缺乏对 TypeScript 或 Nest 的熟悉,但我似乎无法真正了解这些差异,而且缺乏示例也无济于事。

我在 StackOverflow 上看到了一些关于如何实现这一点的答案,例如:

  • 解决方案 1 -向 MySchema.methods 添加方法的示例解决方案
    • 此解决方案对我不起作用:TypeScript 仍然告诉我该类型不存在该属性。
  • 解决方案 2 -使用扩展 Model 的接口的示例解决方案
    • 虽然这种使用我需要的方法添加新接口的解决方案确实让 TypeScript 认识到该方法对该类型有效,但我不确定如何实际实现它。我无法编写实现该接口的类,因为它需要实现 60 多种 Mongoose 模型方法,而我尝试编写实现的任何其他地方都不适合我。

我怎么能做这样的事情?

架构

import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose';
import { …
Run Code Online (Sandbox Code Playgroud)

mongoose typescript nestjs

5
推荐指数
1
解决办法
233
查看次数

如何在 MongoDB 聚合管道中执行嵌套“连接”(连接 3 个或更多集合)?

假设 MongoDB 中有 3 个假设的集合:customersordersorderItems

每个客户有多个订单,每个订单有多个订单项目。

以下是这 3 个集合的一些示例数据:

顾客

[
    {
        customer_id: 1,
        name: "Jim Smith",
        email: "jim.smith@example.com"
    },
    {
        customer_id: 2,
        name: "Bob Jones",
        email: "bob.jones@example.com"
    }
]
Run Code Online (Sandbox Code Playgroud)

命令

[
    {
        order_id: 1,
        customer_id: 1
    },
    {
        order_id: 2,
        customer_id: 1
    }
]
Run Code Online (Sandbox Code Playgroud)

订单项目

[
    {
        order_item_id: 1,
        name: "Foo",
        price: 4.99,
        order_id: 1
    },
    {
        order_item_id: 2,
        name: "Bar",
        price: 17.99,
        order_id: 1
    },
    {
        order_item_id: 3,
        name: "baz",
        price: 24.99, …
Run Code Online (Sandbox Code Playgroud)

mongodb nosql nosql-aggregation aggregation-framework

4
推荐指数
1
解决办法
1715
查看次数

Maybe monad 在 TypeScript 中有何用处?

我\xe2\x80\x99m 努力理解 TypeScript 中 Maybe 类型的价值。I\xe2\x80\x99m 试图理解本文中有关在 TypeScript 中实现您自己的 Maybe 类型的代码示例:

\n
enum MaybeType {\n  Just = \'maybe-type__just\',\n  Nothing = \'maybe-type__nothing\',\n}\n\ninterface Just<T> {\n  type: typeof MaybeType.Just\n  value: T\n}\n\ninterface Nothing {\n  type: typeof MaybeType.Nothing\n}\n\ntype Maybe<T>\n  = Just<T>\n  | Nothing\n\nconst Nothing = (): Nothing => ({\n  type: MaybeType.Nothing,\n})\n\nconst Just = <T> (value: T): Just<T> => ({\n  type: MaybeType.Just,\n  value,\n})\n
Run Code Online (Sandbox Code Playgroud)\n

这实际上有什么用?我不明白\xe2\x80\x99 不明白它\xe2\x80\x99s 比一个类型更好T | undefined

\n

我(非常有限)的理解是 Maybe 类型可以使您免受某些运行时错误的影响,并消除整个代码中对 null/未定义检查的需要。但是,\xe2\x80\x99 难道你只是用undefined在代码中散布的支票来交换Nothing在代码中散布的支票吗?

\n

在此示例中,Nothing …

monads typescript option-type

3
推荐指数
1
解决办法
3135
查看次数