我正在嘗試使用微服務架構構建一個 NestJS Monorepo 服務,PostgreSQL 作為資料庫,Prisma 作為 ORM,TypeScript 作為主要語言。但是當我嘗試執行 Postgres 查詢時,我不斷收到以下錯誤。
src/infrastructure/persistence/work.repository.postgres.ts:188:7 - 錯誤 TS2345:“字串”型別的引數不可分配給“TemplateStringsArray”型別的引數 | Sql'。
我檢查了資料型別,它們似乎兼容。
請幫我解決這個問題。
堆疊:TypeScript、PostgreSQL、Node.JS、Express 和 NestJS。
提前致謝!
async findWriterNumber(writerAddress: string): Promise<number> {
const maxNumber = await this.prismaService.$queryRaw<{
max: number;
}>(
`SELECT coalesce(max('writerNumber') 1, 0) as max
FROM "Work"
LEFT OUTER JOIN "WriterID"
ON "Work"."id" = "WorkID"."workId" AND "WorkID"."address" = '${writerAddress}'`,
);
return maxNumber[0].max;
}
uj5u.com熱心網友回復:
找到一個簡單的修復:
洗掉 ( ) 周圍的 sql 陳述句。
async findWriterNumber(writerAddress: string): Promise<number> {
const maxNumber = await this.prismaService.$queryRaw<{
max: number;
}>
`SELECT coalesce(max('writerNumber') 1, 0) as max
FROM "Work"
LEFT OUTER JOIN "WriterID"
ON "Work"."id" = "WorkID"."workId" AND "WorkID"."address" = '${writerAddress}'`;
return maxNumber[0].max;
}
準備好的陳述句會將查詢轉換為“選擇合并...從作業中...地址=$1”并將$1作為引數發送 - 因此您不需要將其包裹在引號中。
uj5u.com熱心網友回復:
另一種解決方案是使用Prisma.sql助手:
const maxNumber = await this.prismaService.$queryRaw<{ max: number; }>(
Prisma.sql`SELECT coalesce(max('writerNumber') 1, 0) as max
FROM "Work"
LEFT OUTER JOIN "WriterID"
ON "Work"."id" = "WorkID"."workId"
AND "WorkID"."address" = '${writerAddress}'`,
);
return maxNumber[0].max;
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/317120.html
標籤:节点.js 打字稿 PostgreSQL 嵌套 棱镜
