我在搬家.js代码到typescript.这是我的用户模型的简化版本.

//user.model.ts
import { Schema, Types } from 'mongoose';

export interface User {
  name: string;
  active: boolean;
}

const UserSchema = new Schema<User>(
  {
    name: {
      type: String,
      required: [true, 'First Name is required'],
      trim: true,
    },
    active: {
      type: Boolean,
      deafult: true,
      select: false,
    },
  },
  {
    timestamps: true,
  }
);


UserSchema.pre(/^find/, async function (next) {
  this.find({ active: { $ne: false } });
  next();
});

const User = mongoose.model('User', UserSchema);

export default User;

这里有两个问题:

  1. 我需要在界面中包含时间戳吗?它本身并没有显示任何错误,但我不确定时间戳是否会正确添加到文档中

  2. 我的预钩子显示了此错误:

我不知道如何解决第2个错误.感谢您的指点.

推荐答案

该问题是由使用正则表达式匹配挂钩引起的:

UserSchema.pre(/^find/, async function (next) { … })

因为正则表达式在理论上可以匹配任何内容,TypeScript无法推断中间件的类型(文档或查询).

要解决这个问题,请使用包含要将中间件应用到的每个钩子的数组:

UserSchema.pre([ 'find', 'findOne', 'findOneAndUpdate' ], function (next) {
  this.find({ active: { $ne: false } });
  next();
});

Node.js相关问答推荐

使用NodeJS在S3上传文件时的格式问题

Sequelize-测试使用虚拟场更新模型

MongoDB-$Lookup未获得适当的结果

ForbidenError:使用Express.js的CSRF令牌无效

创建查询以展开数组并筛选出具有特定值的元素之后的元素

为什么 mongoose 没有常规数组方法

如果我在 tsx 文件中使用了use client,ssr 会如何发生?

无法从 mongoDB 访问数据?

为什么我的 npm 脚本中的 glob 不起作用?

Zod 模式中的self 数组

try 在 Heroku 中部署 PRN 应用程序并获得 404

错误:无法检测到网络(event="noNetwork",code=NETWORK_ERROR,version=providers/5.6.8)

仅显示用户在 Reactjs 中使用服务器端发布的帖子是 Node Js、Mongodb

使用 grunt 服务器,如何将所有请求重定向到根 url?

使用 WebSockets 有服务器成本吗?

在Go中,编写非阻塞代码有意义吗?

node.js 中存储的模块变量在什么范围内?

nodejs - 如何读取和输出 jpg 图像?

如何在 NodeJS 中拆分和修改字符串?

Npm postinstall 仅用于开发