userService 中创建用户信息的时候,出现异常

userService 中创建用户信息的时候,出现异常

userService 中创建用户信息的时候,出现异常

ERROR 80601 [-/::1/-/21ms POST /api/users/createByEmail] nodejs.TypeError: this.ownerDocument is not a function

图片描述

mongodb 相关包

{
	"egg-mongoose": "^3.3.1",
    "mongoose": "^6.1.4"
}

请老师帮忙排查一下

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

3回答
张轩 2022-01-04 15:06:09

同学你好 查阅代码得知原因,你的 mongoose 单独安装了一下,是 6.1.4 的版本(其实不需要单独安装,egg-mongoose 安装的时候会安装适配的版本),而 egg-mongoose 依赖的是 5 版本的 mongoose,假如是新版本,然后加上 timestamp 选项就会报错。正如你提示的那个错误一样,

const UserSchema = new Schema<UserProps>({
    username: { type: String, unique: true, required: true },
    password: { type: String, required: true },
    nickName: { type: String },
    picture: { type: String },
    email: { type: String },
    phoneNumber: { type: String },
}, { timestamps: true });

如果吧 timestamps 选项删除就没有问题,所以应该是这个版本不匹配的问题。具体原因没有进行深究深层代码。

重新安装到5版本就可以了

 npm install mongoose@5.13.11 --save

亲测可用。

另外代码中还有几个小错误,一并告诉你

export interface UserProps {
    username: string;
    password: string;
    email?: string;
    nickName?: string;
    picture?: string;
    phoneNumber?: string;
    // 这里的拼写和类型你写错了,下同
    createdAt: Date;
    updatedAt: Date;
}

controller 中

// 传参数你写错了,ctx 也需要带着
ctx.helper.success({ ctx, res: userData });


  • 提问者 吴大宝100 #1

    好的 多谢老师

    2022-01-05 07:49:27
  • 斜光 #2

    我的也报了这个错误,但我直接装的egg-mongoose,并没有单独安装过mongoose

    2022-06-12 15:25:45
  • 这个问题应该和timestamps没有关系吧,也不是版本原因,而是模块导入的方式不一样,来源不一样导致的问题

    https://img1.sycdn.imooc.com//climg/632e80e5095495bf09620194.jpg

    https://img1.sycdn.imooc.com//climg/632e80e5094d76b113040654.jpg


    "egg-mongoose": "^3.3.1",最早我Schema的导入和白色图的一样,也就是老师现有的代码,报了同样的错误,后来我改为Schema统一从app中取错误就消失了,所以我猜测应该是模块导入的原因,与版本无关


    2022-09-24 12:04:17
回忆的 2022-01-04 13:26:57

创建 Schema 的时候,换成这种形式就可以:

{ Application } UserProps {
  : : ?: ?: ?: ?: : Date: Date}

(app: Application) {
  mongoose = app.Schema = mongoose.SchemaUserSchema = Schema<UserProps>({
    : { : : : }: { : : }: { : }: { : }: { : }: { : }}{ : })app..<UserProps>(UserSchema)}


  • https://img1.sycdn.imooc.com//climg/61d3dabf092cf8de08300680.jpg

    2022-01-04 13:27:32
  • 提问者 吴大宝100 回复 回忆的 #2

    同学您好, 我的 app.mongoose 对象上没有Schema 属性,类型是一个 connection,请问您这块有啥额外配置么

    2022-01-04 14:15:01
张轩 2022-01-04 09:23:55

同学你好 

我估计是 model 的问题 请把代码库发给我一下(git),我在本地帮你看看

  • 提问者 吴大宝100 #1
    2022-01-04 14:12:53
  • 提问者 吴大宝100 #2

    老师我刚把我本地的 mongoose 6+ 版本卸载了然后把本地的 node_modules 删除了然后重新安装了所有依赖安装完成之后发现之前的代码好使了可能是本地的 mongoose 版本和 egg-mongoose 的版本冲突了创建时用的 Schema 和 引入的Schema 类型不一样导致的

    2022-01-04 15:05:37
  • 张轩 回复 提问者 吴大宝100 #3

    哈哈 我刚回复你拉 结果是一样的

    2022-01-04 15:08:22
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师