Kri*_*aul 5 javascript rest express typescript prisma
我从typescript-express-starter生成了一个项目,并选择Prisma作为 ORM。启动项目生成的基本“用户”模型运行良好。我创建了一个模型“产品”作为现有的“用户”模型。我将其添加到schema.prisma中并创建了 products.services.ts。
import { PrismaClient, Product } from '@prisma/client';
import { CreateProductDto } from '@dtos/products.dto';
import HttpException from '@exceptions/HttpException';
import { isEmpty } from '@utils/util';
class ProductService {
public products = new PrismaClient().product;
public async findAllProducts(): Promise<Product[]> {
const allProducts: Product[] = await this.products.findMany();
return allProducts;
}
}
export default ProductService;
Run Code Online (Sandbox Code Playgroud)
问题是PrismaClient().user返回 prisma 模型,但PrismaClient().product返回未定义。生成的 PrismaClient 打字稿文件具有产品模型和关联方法,并且也显示在 VS Code 提示中。但是,当运行项目时,PrismaClient().products 返回未定义而不是实际模型。运行 prisma studio 时,它会显示模型。
我无法从可用的文档或论坛中找到任何解决方案。我最可能的猜测是我缺少一些需要添加才能工作的配置或文件。但我不知道那可能是在哪里、是什么。请帮忙。
这是new PrismaClient()的日志。
server | PrismaClient: <ref *1> NewPrismaClient [PrismaClient] {
server | _middlewares: [],
server | _engineMiddlewares: [],
server | _transactionId: 1,
server | _rejectOnNotFound: undefined,
server | _clientVersion: '2.23.0',
server | _activeProvider: 'mysql',
server | _errorFormat: 'colorless',
server | _dmmf: DMMFClass {
server | outputTypeToMergedOutputType: [Function (anonymous)],
server | datamodel: { enums: [], models: [Array] },
server | schema: {
server | inputObjectTypes: [Object],
server | outputObjectTypes: [Object],
server | enumTypes: [Object]
server | },
server | mappings: { modelOperations: [Array], otherOperations: [Object] },
server | enumMap: { UserScalarFieldEnum: [Object], SortOrder: [Object] },
server | datamodelEnumMap: {},
server | queryType: {
server | name: 'Query',
server | fields: [Array],
server | isEmbedded: false,
server | fieldMap: [Object]
server | },
server | mutationType: {
server | name: 'Mutation',
server | fields: [Array],
server | isEmbedded: false,
server | fieldMap: [Object]
server | },
server | modelMap: { User: [Object] },
server | outputTypes: { model: [Array], prisma: [Array] },
server | outputTypeMap: {
server | User: [Object],
server | Query: [Object],
server | Mutation: [Object],
server | AggregateUser: [Object],
server | UserGroupByOutputType: [Object],
server | AffectedRowsOutput: [Object],
server | UserCountAggregateOutputType: [Object],
server | UserAvgAggregateOutputType: [Object],
server | UserSumAggregateOutputType: [Object],
server | UserMinAggregateOutputType: [Object],
server | UserMaxAggregateOutputType: [Object]
server | },
server | inputObjectTypes: { prisma: [Array] },
server | inputTypeMap: {
server | UserWhereInput: [Object],
server | UserOrderByInput: [Object],
server | UserWhereUniqueInput: [Object],
server | UserScalarWhereWithAggregatesInput: [Object],
server | UserCreateInput: [Object],
server | UserUncheckedCreateInput: [Object],
server | UserUpdateInput: [Object],
server | UserUncheckedUpdateInput: [Object],
server | UserCreateManyInput: [Object],
server | UserUpdateManyMutationInput: [Object],
server | UserUncheckedUpdateManyInput: [Object],
server | IntFilter: [Object],
server | StringFilter: [Object],
server | IntWithAggregatesFilter: [Object],
server | StringWithAggregatesFilter: [Object],
server | StringFieldUpdateOperationsInput: [Object],
server | IntFieldUpdateOperationsInput: [Object],
server | NestedIntFilter: [Object],
server | NestedStringFilter: [Object],
server | NestedIntWithAggregatesFilter: [Object],
server | NestedFloatFilter: [Object],
server | NestedStringWithAggregatesFilter: [Object]
server | },
server | mappingsMap: { User: [Object] },
server | rootFieldMap: {
server | findFirstUser: [Object],
server | findManyUser: [Object],
server | aggregateUser: [Object],
server | groupByUser: [Object],
server | findUniqueUser: [Object],
server | createOneUser: [Object],
server | upsertOneUser: [Object],
server | createManyUser: [Object],
server | deleteOneUser: [Object],
server | updateOneUser: [Object],
server | updateManyUser: [Object],
server | deleteManyUser: [Object],
server | executeRaw: [Object],
server | queryRaw: [Object]
server | }
server | },
server | _previewFeatures: [],
server | _engineConfig: {
server | cwd: '/app/src/prisma',
server | dirname: '/app/node_modules/.prisma/client',
server | enableDebugLogs: false,
server | enableEngineDebugMode: undefined,
server | datamodelPath: '/app/node_modules/.prisma/client/schema.prisma',
server | prismaPath: undefined,
server | engineEndpoint: undefined,
server | datasources: [],
server | generator: {
server | name: 'client',
server | provider: [Object],
server | output: [Object],
server | config: {},
server | binaryTargets: [],
server | previewFeatures: []
server | },
server | showColors: false,
server | logLevel: undefined,
server | logQueries: undefined,
server | env: {
server | PORT: '3000',
server | DATABASE_URL: 'mysql://root:password@mysql:3306/prisma'
server | },
server | flags: [],
server | clientVersion: '2.23.0',
server | previewFeatures: [],
server | useUds: undefined,
server | activeProvider: 'mysql'
server | },
server | _engine: NodeEngine {
server | startCount: 0,
server | previewFeatures: [],
server | useUds: false,
server | stderrLogs: '',
server | handleRequestError: [AsyncFunction (anonymous)],
server | dirname: '/app/node_modules/.prisma/client',
server | env: {
server | PORT: '3000',
server | DATABASE_URL: 'mysql://root:password@mysql:3306/prisma'
server | },
server | cwd: '/app/src/prisma',
server | enableDebugLogs: false,
server | enableEngineDebugMode: false,
server | datamodelPath: '/app/node_modules/.prisma/client/schema.prisma',
server | prismaPath: undefined,
server | generator: {
server | name: 'client',
server | provider: [Object],
server | output: [Object],
server | config: {},
server | binaryTargets: [],
server | previewFeatures: []
server | },
server | datasources: [],
server | logEmitter: EventEmitter {
server | _events: [Object: null prototype],
server | _eventsCount: 1,
server | _maxListeners: undefined,
server | [Symbol(kCapture)]: false
server | },
server | showColors: false,
server | logLevel: undefined,
server | logQueries: false,
server | clientVersion: '2.23.0',
server | flags: [],
server | activeProvider: 'mysql',
server | engineEndpoint: undefined,
server | platformPromise: Promise { <pending> },
server | getConfigPromise: Promise { <pending> }
server | },
server | _fetcher: PrismaClientFetcher {
server | prisma: [Circular *1],
server | debug: false,
server | hooks: undefined,
server | dataloader: Dataloader { options: [Object], tickActive: false, batches: {} }
server | },
server | user: {
server | findUnique: [Function (anonymous)],
server | findFirst: [Function (anonymous)],
server | findMany: [Function (anonymous)],
server | create: [Function (anonymous)],
server | createMany: [Function (anonymous)],
server | delete: [Function (anonymous)],
server | update: [Function (anonymous)],
server | deleteMany: [Function (anonymous)],
server | updateMany: [Function (anonymous)],
server | upsert: [Function (anonymous)],
server | count: [Function (anonymous)],
server | aggregate: [Function (anonymous)],
server | groupBy: [Function (anonymous)]
server | }
server | }
Run Code Online (Sandbox Code Playgroud)
小智 11
今天我也遇到了同样的问题,直到我了解到每次更改文件后schema.prisma
,我都需要运行:
npx prisma generate
Run Code Online (Sandbox Code Playgroud)
然后还生成迁移
npx prisma migrate dev --name name_of_stuff
Run Code Online (Sandbox Code Playgroud)
但它是第一个修复了您上面提到的确切错误的。
小智 5
我早些时候遇到过类似的问题。为了解决这个问题,我添加了一个自定义路径,用于在 schema.prisma 文件内生成 prisma 客户端,如下所示 -
generator client {
provider = "prisma-client-js"
output = "./src/generated/client"
}
Run Code Online (Sandbox Code Playgroud)
然后从输出路径导入 prisma 客户端,如下所示 -
const { PrismaClient } = require('./src/generated/client')
const prisma = new PrismaClient()
Run Code Online (Sandbox Code Playgroud)
这可确保您在导入 prisma 客户端时不会引用任何错误的路径。
它应该只是:
public products = new PrismaClient();
Run Code Online (Sandbox Code Playgroud)
然后你就可以使用this.products.findMany()
.
注意:虽然这不是正确的方法。建议在整个项目中使用 PrismaClient 的单个实例。
归档时间: |
|
查看次数: |
17946 次 |
最近记录: |