【问题标题】:How to add a prisma middleware in different file如何在不同的文件中添加 prisma 中间件
【发布时间】:2021-09-27 21:27:54
【问题描述】:

我正在尝试使用 Prisma 中间件来散列密码。对于散列,我创建了一个新目录(中间件)并在其中创建了一个新文件 prisma.ts。现在我想在创建新用户时访问这些中间件。

import bcrypt from 'bcryptjs'
import { PrismaClient, Prisma } from '@prisma/client'

const prisma: PrismaClient = new PrismaClient()

prisma.$use(async (params: Prisma.MiddlewareParams, next) => {
    if (params.action == 'create' && params.model == 'User') {
        let user = params.args.data
        let salt = bcrypt.genSaltSync(10)
        let hash = bcrypt.hashSync(user.password, salt)
        user.password = hash
    }
    return await next(params)
})

【问题讨论】:

    标签: typescript orm prisma


    【解决方案1】:

    您可以在您创建的新文件中导入prisma,然后在那里定义您的中间件。

    【讨论】:

    • 是的,目前我正在使用这些。 ,但我想从控制器中删除中间件并将其放入不同的空间。有没有可能
    • 是的。正如我上面提到的,只要使用上面相同的prisma 变量创建中间件,就可以将中间件放在任何地方。确保将prisma 导入到中间件文件中并在那里创建中间件。
    • 是的,我就是这样创建的。但它不工作。请看代码。
    • 代码看起来正确。您面临什么问题?
    【解决方案2】:
    // File: prisma.ts
    
    import { PrismaClient, Prisma } from '@prisma/client'
    import * as middleware from './prismaMiddleware';
    
    const prisma: PrismaClient = new PrismaClient();
    
    prisma.$use(middleware.Encrypt);
    
    // File: prismaMiddleware.ts
    import {Prisma} from '@prisma/client';
    import bcrypt from 'bcryptjs';
    export const Encrypt: Prisma.Middleware =  async (params: Prisma.MiddlewareParams, next) => {
        if (params.action == 'create' && params.model == 'User') {
            let user = params.args.data
            let salt = bcrypt.genSaltSync(10)
            let hash = bcrypt.hashSync(user.password, salt)
            user.password = hash
        }
        return await next(params)
    }
    

    【讨论】:

    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-17
    • 2021-04-01
    • 1970-01-01
    相关资源
    最近更新 更多