首页 > 解决方案 > 在nestjs中更新特定列的正确方法是什么

问题描述

我想将生成的令牌保存到用户确认的电子邮件列中。令牌是发送给用户的确认链接的一部分,这样当用户点击链接时,我可以检查它是否匹配,然后将其更新为“已激活”。

现在的问题是我不知道如何在 ConfirmEmailLink 方法中保存它。

   async register(createDTO: CreateUserDto) {
        const { email } = createDTO;
        const user = await this.userModel.findOne({ email })
        if (user) {
            throw new HttpException('User already exists', HttpStatus.BAD_REQUEST);
        }

        const createdUser = new this.userModel(createDTO);
        var newUser = await createdUser.save();


        await SendEmail(createDTO.email, await **this.ConfirmEmailLink(createdUser._id)**, createDTO.email);

        return this.sanitizeUser(createdUser);
        //return null;

    }

在上面的代码中有 ConfirmEmailLink 是 SendEmail 方法的参数

 async ConfirmEmailLink(userId: string) {
        const id = v4();
        var payload = { userId: userId };
        var secret = process.env.JWT_SIMPLE_TOKEN;
        var token = jwt.encode(payload, secret);
        console.log("This is uuid", userId);

        var link = `${process.env.HOST}/user/confirm/${token}/${id}`;

        let user = await this.userModel.findById(userId);

        if (!user) {
            throw new HttpException("Registration not complete, try again or contact admin", HttpStatus.NOT_FOUND);
        }

       **//This is where the problem is, I want to save the token in ConfirmEmail column** 
        await this.userModel.updateOne({confirmEmail: token});


        return link;

    }

我会很感激你的建议,或者如果有更好的方法来做到这一点谢谢

标签: node.jsmongodbapiexpressnestjs

解决方案


updateOne需要 2 个参数,一个用于识别要修改哪个文档的过滤器,以及一个指示要做什么的更新。

.updateOnde({"_id":userId},{"$set":{"confirmEmail": token}})

推荐阅读