如何在Prisma查询返回时自动添加域名前缀?及中间件问题排查
Prisma 自动拼接附件域名前缀的解决方案
需求背景
我用 NestJS 和 Prisma 搭建后端,Attachment 模型用于存储文件路径。目前保存的是完整路由,比如 'http://127.0.0.1:5000/api/123.jpg',希望改为存储相对路径 '/123.jpg',让 Prisma 在查询时自动拼接域名前缀 http://127.0.0.1:5000/api,这样服务器迁移到不同域名时能更轻松。
之前我是通过循环遍历查询结果手动添加域名,但所有关联查询和路由里都要重复这个操作,想找 Prisma 层面的解决方案。
我的 schema.prisma 定义如下:
model Attachment { id Int @id @default(autoincrement()) //is there a way to inject a domain url string in front of the string this sends out? thumbnail String? original String? }
已尝试的方案
我编写了 Prisma 中间件,代码放在 /prisma/prisma.ts 中:
import { PrismaClient } from '@prisma/client'; import { APP_URL } from '../src/common/constants'; let prisma: PrismaClient; if (process.env.NODE_ENV === 'production') { prisma = new PrismaClient(); } else { if (!global.prisma) { global.prisma = new PrismaClient(); } prisma = global.prisma; } // 给 Attachment 的 original/thumbnail 字段自动拼接服务器地址 prisma.$use(async (params, next) => { console.log('params', params) if (params.model == 'Attachment' && params.action == 'findMany') { params.args.data.thumbnail = APP_URL + params.args.data.thumbnail; } return next(params) }) export default prisma;
但控制台打印的 params 中不存在 params.args.data,日志内容如下:
params { args: { include: { avatar: true, addresses: true } }, dataPath: [], runInTransaction: false, action: 'findMany', model: 'User' }
内容的提问来源于stack exchange,提问作者rockets4all
相关产品推荐
相关产品推荐

