You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vercel部署时Prisma查询出现UserWhereInput类型错误

问题描述

本地运行正常的Next.js + Prisma API接口,部署到Vercel生产环境时出现如下类型错误:

Type error: Type '{ activated: true; }' is not assignable to type 'UserWhereInput'.
  Object literal may only specify known properties, and 'activated' does not exist in type 'UserWhereInput'.

activated字段已在Prisma Schema中定义,但TypeScript无法识别该字段。相关代码如下:

../api/alert.ts

// ../api/alert.ts

import type { NextApiRequest, NextApiResponse } from "next";
import prisma from "../../lib/prisma";

export default async function handler(
  req: NextApiRequest,
  res: NextApiResponse
) {
  if (req.method === "POST") {
    try {
      const { authorization } = req.headers;

      if (authorization === `Bearer ${process.env.API_SECRET_KEY}`) {
        // 验证调用API的服务权限

        // 获取所有已激活用户
        const activeUsers = prisma.user.findMany({
          where: { activated: true },              
        });

        // 其他操作

        res.status(200).json({ success: true });
      } else {
        res.status(401).json({ success: false });
      }
    } catch (err) {
      res.status(500).json({ statusCode: 500 });
    }
  } else {
    res.setHeader("Allow", "POST");
    res.status(405).end("Method Not Allowed");
  }
}

schema.prisma

...
model User {
  id        String    @id @default(cuid())
  phone     String
  createdAt DateTime  @default(now())
  activated Boolean   @default(false)
  Message   Message[]
}

/lib/prisma.ts

import { PrismaClient } from "@prisma/client";

let prisma: PrismaClient;

if (process.env.NODE_ENV === "production") {
  prisma = new PrismaClient();
} else {
  let globalWithPrisma = global as typeof globalThis & {
    prisma: PrismaClient;
  };
  if (!globalWithPrisma.prisma) {
    globalWithPrisma.prisma = new PrismaClient();
  }
  prisma = globalWithPrisma.prisma;
}

export default prisma;

解决方法

1. 重新生成Prisma客户端

修改schema.prisma后,必须重新生成客户端代码才能让TypeScript识别新增字段。本地执行:

npx prisma generate

将生成的类型定义文件(位于node_modules/@prisma/client)同步到版本库,确保部署时使用最新的类型。

2. 修改Vercel构建命令

在package.json的scripts中,确保build命令包含Prisma生成步骤:

{
  "scripts": {
    "dev": "next dev",
    "build": "prisma generate && next build",
    "start": "next start"
  }
}

这样Vercel在构建生产环境时会自动生成最新的Prisma客户端,避免使用旧的类型定义。

3. 清理缓存重新部署

如果Vercel缓存了旧的依赖或构建产物,会导致类型未更新。进入Vercel项目的"Deployments"页面,找到最新部署记录,点击"Redeploy"并勾选"Clear build cache"。

4. 确认依赖配置

确保@prisma/client是生产依赖,避免部署时缺失:

npm install @prisma/client --save

内容的提问来源于stack exchange,提问作者yumba

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 10:56:06