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

Nestjs登录时报invalid input syntax for type integer: 邮箱值错误

问题原因

你遇到的报错根源是AuthService中signIn方法的findOne调用写法错误:
TypeORM 的 Repository.findOne() 方法如果直接传入非对象类型的参数(比如你这里传的email字符串),会默认把参数值当做**主键字段(也就是你User实体定义的id,类型为int)**进行匹配查询。
数据库执行查询时尝试把你传入的邮箱字符串don@gmail.com转为整数匹配id字段,自然就抛出了invalid input syntax for type integer的类型错误,和你的email字段本身的类型定义没有关系。

解决方法

修改AuthService的signIn方法中findOne的传参,明确指定查询条件为email字段即可,写法根据你使用的TypeORM版本略有不同:

  • 如果你用的是 TypeORM 0.3.x 及以上版本:
// 原错误写法
// const user = await this.usersRepository.findOne(email);
// 修正后写法
const user = await this.usersRepository.findOne({
  where: { email }
});
  • 如果你用的是 TypeORM 0.2.x 版本:
const user = await this.usersRepository.findOne({ email });

修改完成后重新测试登录接口即可正常运行。

同类问题排查思路

遇到类似数据库类型不匹配报错时,可以按以下步骤快速定位:

  • 先核对报错中提到的字段类型和传入值的类型差异,确认是哪个字段被错误赋值
  • 检查对应查询逻辑的参数写法,确认是否有ORM方法使用不符合语法规范的问题
  • 打印ORM生成的原生SQL语句核对,能更直观发现查询条件和字段的匹配错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 13:54:05