node.js - Mongoose 插件 nestjs

标签 node.js mongoose 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 });

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

最佳答案

这是给那些正在使用 mongoose-paginate 的人的片段带有 nestjs 的插件。您还可以安装 @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);
  1. 现在在Message接口(interface)文档中
export interface Message extends Document {
// Your schema fields here
}

  1. 现在您可以像这样轻松地在服务类中获取分页方法
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);
    }
}

关于node.js - Mongoose 插件 nestjs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49387454/

相关文章:

node.js - 在大文档中查找对象

node.js - 将node js查询结果分离成对象?

javascript - Mongoose FindOne 在创建后无法直接工作

node.js - 如何覆盖 Mongoose 插件的功能?

javascript - 在函数外部使用变量

Mongoose :函数 "once"

node.js - 如何为即时消息系统设计 redis pub/sub?

node.js - Mongoose 高级自定义模式对象类型

node.js - 在终端中使用 tsc 编译类型脚本时出现类型脚本错误

Javascript promise 返回意外的 token 错误