小编use*_*584的帖子

NestJS - 文件上传到微服务

我需要将文件上传到 API 网关。添加一些元信息后,文件应该发送到另一个(微)服务(如 Content-Type: multipart/form-data)。我在 API 网关中构建 FormData 对象时遇到了一些问题。我不想在网关上保留文件,所以我基本上只是想通过它。

为了创建 formData 对象,我使用了Form-Data

这是一个尝试:

    // Controller
    @Post()
    @UseInterceptors(FileInterceptor('file'))
    async create(@Res() res, @UploadedFile('file') file, @Body() body: any) {
        return await this.someService.create(file);
    }
Run Code Online (Sandbox Code Playgroud)
    // Service
    async create(file: any) {
        const formData = new FormData();

        formData.append('file', file);
        formData.append('key', 'value');

        const formHeaders = formData.getHeaders();

        try {
            const result = await this.httpService

                .post('http://some-other-service/import', formData , {
                    headers: {
                        ...formHeaders,
                    },
                })
                .toPromise();
            return result.data;
        } catch (e) {
            throw new BadGatewayException();
        }
    }
Run Code Online (Sandbox Code Playgroud)

这会导致以下错误:

TypeError: …
Run Code Online (Sandbox Code Playgroud)

file-upload node.js axios nestjs

8
推荐指数
1
解决办法
1788
查看次数

使用猫鼬更新哈希密码

为了在将对象保存到 mongodb 之前散列密码,我使用了 mongoose 附带的内置预保存钩子。但是在更新期间处理散列的正确方法是什么?

我试图用 pre-update hook 解决这个问题,但这有一些明显的缺点,因为它绕过了模型验证(例如密码长度)。

那是我的方法(缩短):

userSchema.pre('findOneAndUpdate', function (next) {
    let query = this;
    let update = query.getUpdate();

    if (!update.password) {
        return next();
    }

    hashPassword(update.password, function (err, hash) {
        //handle error or go on...
        //e.g update.password = hash;
    });
});
Run Code Online (Sandbox Code Playgroud)

那么,解决这个问题的首选方法是什么?

mongoose node.js express

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

NestJS-在微服务中将HTTP与RabbitMQ结合

我有一些微服务,通过API网关公开。网关负责处理身份验证和路由到系统中。网关后面的服务主要是简单的CRUD服务。每个服务都公开自己的API,并通过HTTP同步通信。所有这些服务,包括API-Gateway,都是“默认” NestJS应用程序。

让我们继续坚持猫的例子。每当Cat-Service更新或创建新的时Cat,我都希望CatCreatedEvent或被CatUpdatedEvent模仿。该事件应被推送到某些消息代理中,例如RabbitMQ,而另一个服务应侦听此事件并异步处理该事件。

我不知道如何以正确的方式“注入” RabbitMQ来实现这一目标,我想知道这种方法是否合乎常理。我已经看到了NestJS的CQRS模块,但是我认为CQRS对于该域来说有点过多。尤其是因为在此域中没有好处,无法拆分读写模型。也许我完全走错了道路,所以希望您能给我一些建议。

events rabbitmq node.js microservices nestjs

2
推荐指数
1
解决办法
2334
查看次数