findByUsername() returns 空白页
findByUsername() returns blank page
我正在使用 mongodb (mongoose) 学习 nestjs,我正在尝试从数据库中获取单个用户。
users.service.ts
@Injectable()
export class UsersService {
constructor(@InjectModel(User.name) private readonly userModel: Model<UserDocument>,) {}
async create(createUserDto: CreateUserDto): Promise<User> {
const createdUser = new this.userModel(createUserDto);
return createdUser.save();
}
async findAll(): Promise<User[]> {
return this.userModel.find().exec();
}
async findByUsername(username: string): Promise<User | undefined> {
return this.userModel.findOne({username})
}
}
users.controller.ts
@UseGuards()
@Controller('/api/users')
export class UsersController {
constructor(private readonly usersService: UsersService) {
}
@Post()
async create(@Body() user: CreateUserDto) {
await this.usersService.create(user);
}
@Get()
async findAll(): Promise<User[]> {
return this.usersService.findAll();
}
@Get(':username')
async findOne(username: string): Promise<User> {
return this.usersService.findByUsername(username);
}
}
users.schema.ts
export type UserDocument = User & Document;
@Schema()
export class User {
@Prop()
firstname: string;
@Prop()
lastname: string;
@Prop({required: true})
username: string;
@Prop({required: true})
password: string;
@Prop({default: false})
isAdmin: boolean;
}
export const UserSchema = SchemaFactory.createForClass(User);
问题是我在导航到 http://localhost:3000/ 时收到一个空白页面api/users/username
Postman 也没有返回任何东西。
有什么想法吗?
您的 @Get(':username')
路由处理程序定义它应该有一个 username
参数传递给它,但没有告诉 Nest 如何 传递它。您可以在此处执行以下两项操作之一:
使用 @Param('username')
直接从 req.params['username']
中提取用户名。快速简单
用@Param() { username }
解构req.params
只取出username
(反正应该是唯一的值)。这种方法的好处是能够使用 ValidationPipe
和 DTO class 来表示 req.params
对象。使用第二种方法,您的 @Get(':username')
方法将如下所示:
Get(':username')
async findOne(@Param() { username }: UsernameParams) {
return this.usersService.findByEmail(username);
}
我正在使用 mongodb (mongoose) 学习 nestjs,我正在尝试从数据库中获取单个用户。
users.service.ts
@Injectable()
export class UsersService {
constructor(@InjectModel(User.name) private readonly userModel: Model<UserDocument>,) {}
async create(createUserDto: CreateUserDto): Promise<User> {
const createdUser = new this.userModel(createUserDto);
return createdUser.save();
}
async findAll(): Promise<User[]> {
return this.userModel.find().exec();
}
async findByUsername(username: string): Promise<User | undefined> {
return this.userModel.findOne({username})
}
}
users.controller.ts
@UseGuards()
@Controller('/api/users')
export class UsersController {
constructor(private readonly usersService: UsersService) {
}
@Post()
async create(@Body() user: CreateUserDto) {
await this.usersService.create(user);
}
@Get()
async findAll(): Promise<User[]> {
return this.usersService.findAll();
}
@Get(':username')
async findOne(username: string): Promise<User> {
return this.usersService.findByUsername(username);
}
}
users.schema.ts
export type UserDocument = User & Document;
@Schema()
export class User {
@Prop()
firstname: string;
@Prop()
lastname: string;
@Prop({required: true})
username: string;
@Prop({required: true})
password: string;
@Prop({default: false})
isAdmin: boolean;
}
export const UserSchema = SchemaFactory.createForClass(User);
问题是我在导航到 http://localhost:3000/ 时收到一个空白页面api/users/username Postman 也没有返回任何东西。
有什么想法吗?
您的 @Get(':username')
路由处理程序定义它应该有一个 username
参数传递给它,但没有告诉 Nest 如何 传递它。您可以在此处执行以下两项操作之一:
使用
@Param('username')
直接从req.params['username']
中提取用户名。快速简单用
@Param() { username }
解构req.params
只取出username
(反正应该是唯一的值)。这种方法的好处是能够使用ValidationPipe
和 DTO class 来表示req.params
对象。使用第二种方法,您的@Get(':username')
方法将如下所示:
Get(':username')
async findOne(@Param() { username }: UsernameParams) {
return this.usersService.findByEmail(username);
}