如果用户存在于 mongo 上并创建用户,如何使用 Nest js 抛出异常?

Say*_*yan 5 javascript mongodb node.js express nestjs

这是 users.service.ts 中的 addUser 方法 -

// post a single user
async addUser(createUserDTO: CreateUserDTO): Promise<User> {
    const newUser = await this.userModel(createUserDTO);
    return newUser.save();
}
Run Code Online (Sandbox Code Playgroud)

这是 users.controller.ts 中的 POST 控制器方法 -

// add a user
@Post('/create')
async addUser(@Res() res, @Body() createUserDTO: CreateUserDTO) {
    const user = await this.usersService.addUser(createUserDTO);
    return res.status(HttpStatus.OK).json({
        message: "User has been created successfully",
        user
    })
}
Run Code Online (Sandbox Code Playgroud)

我尝试使用 mongo 集合 findOne 方法,并获取用户详细信息(如果它已存在于 mongo 中),但无法理解如何在存在时引发异常以及在不存在时将其以嵌套 js 样式添加到 mongodb 中 -

const user = await this.userModel.findOne({ userName: createUserDTO.userName });
Run Code Online (Sandbox Code Playgroud)

我将不胜感激的帮助:)

注意: nest js完全是新手

Sas*_*iha 3

您可以修改 user.service.ts 文件,以便它可以包含一个单独的方法来检查用户是否存在。

async doesUserExists(createUserDTO: CreateUserDTO): any {
    const user = await this.userModel.findOne({ userName: createUserDTO.userName });
    if(user.length != 0){
        return true;
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)

在您的 user.controller 文件中,您可以调用用户服务中的用户存在函数来检查,然后进行相应操作

// add a user
@Post('/create')
async addUser(@Res() res, @Body() createUserDTO: CreateUserDTO) {
    if(await this.userService.doesUserExists()){
        return res.status(HttpStatus.OK).json({
            message: "User already exists"
        })
    }
    const user = await this.usersService.addUser(createUserDTO);
    return res.status(HttpStatus.OK).json({
        message: "User has been created successfully",
        user
    })
}
Run Code Online (Sandbox Code Playgroud)