猫鼬插件 nestjs

Wal*_*ruz 8 mongoose node.js mongoose-plugins nestjs

如何使用 nestjs 实现 mongoose 插件?

import * as mongoose from 'mongoose';
import uniqueValidator from 'mongoose-unique-validator';
import mongoosePaginate from 'mongoose-paginate';
import mongoose_delete from 'mongoose-delete';

const UsuarioSchema = new mongoose.Schema({
    username: {
        type: String,
        unique: true,
        required: [true, 'El nombre de usuario es requerido']
    },
    password: {
        type: String,
        required: [true, 'La clave es requerida'],
        select: false
    }
});

UsuarioSchema.plugin(uniqueValidator, { message: '{PATH} debe ser único' });
UsuarioSchema.plugin(mongoosePaginate);
UsuarioSchema.plugin(mongoose_delete, { deletedAt : true, deletedBy : true, overrideMethods: true });
Run Code Online (Sandbox Code Playgroud)

错误:第一个参数schema.plugin()必须是一个函数,得到“未定义”

San*_*air 15

这是针对那些使用带有 nestjs 的 mongoose -paginate插件的人的片段。您还可以安装@types/mongoose-paginate以获得打字支持

  1. 将分页插件添加到架构的代码:
import { Schema } from 'mongoose';
import * as mongoosePaginate from 'mongoose-paginate';

export const MessageSchema = new Schema({
// Your schema definitions here
});

// Register plugin with the schema
MessageSchema.plugin(mongoosePaginate);
Run Code Online (Sandbox Code Playgroud)
  1. 现在在 Message 接口文档中
export interface Message extends Document {
// Your schema fields here
}

Run Code Online (Sandbox Code Playgroud)
  1. 现在您可以像这样轻松地在服务类中获取 paginate 方法
import { Injectable } from '@nestjs/common';
import { InjectModel } from '@nestjs/mongoose';
import { PaginateModel } from 'mongoose';
import { Message } from './interfaces/message.interface';

@Injectable()
export class MessagesService {
    constructor(
        // The 'PaginateModel' will provide the necessary pagination methods
        @InjectModel('Message') private readonly messageModel: PaginateModel<Message>,
    ) {}

    /**
     * Find all messages in a channel
     *
     * @param {string} channelId
     * @param {number} [page=1]
     * @param {number} [limit=10]
     * @returns
     * @memberof MessagesService
     */
    async findAllByChannelIdPaginated(channelId: string, page: number = 1, limit: number = 10) {
        const options = {
            populate: [
                // Your foreign key fields to populate
            ],
            page: Number(page),
            limit: Number(limit),
        };
        // Get the data from database
        return await this.messageModel.paginate({ channel: channelId }, options);
    }
}
Run Code Online (Sandbox Code Playgroud)


Sha*_*ifa 0

timestamp这是使用插件的示例

import { Schema } from 'mongoose';
import * as timestamp from 'mongoose-timestamp';
export const ConversationSchema = new Schema({
  users: [String],
}).plugin(timestamp);
Run Code Online (Sandbox Code Playgroud)

尝试更换

import uniqueValidator from 'mongoose-unique-validator';
import mongoosePaginate from 'mongoose-paginate';
import mongoose_delete from 'mongoose-delete';
Run Code Online (Sandbox Code Playgroud)

经过

import * as uniqueValidator from 'mongoose-unique-validator';
import * as mongoosePaginate from 'mongoose-paginate';
import * as mongoose_delete from 'mongoose-delete';
Run Code Online (Sandbox Code Playgroud)