Nestjs:无法输入,无法删除(找不到404)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nestjs:无法输入,无法删除(找不到404)相关的知识,希望对你有一定的参考价值。

我正在执行类似的nestjs示例,为用户列表编写一个简单的CRUD程序。尽管GET,POST和ID by GET可以正常工作,但PUT和DELETE无法正常工作。我得到“用户不存在”,但是数据库中存在用户。

Controller

@Controller('users')
export class UsersController 
constructor(private userService: UsersService) 
.....

//Update a user's details
@Put('/update')
async updateUser(
    @Res() res, 
    @Query('userid') userID, 
    @Body() createUserDto: CreateUserDto
) 
    const user = await this.userService.updateUser(userID, createUserDto);
    if (!user) throw new NotFoundException('User does not exist!');
    return res.status(HttpStatus.OK).json(
        message: 'User has been successfully updated',
        user
    )


//Delete a user
@ApiParam( name: 'id' )
@Delete('/delete')
async deleteUser(@Res() res, @Query('userid') userID) 
    const user = await this.userService.deleteUser(userID);
    if (!user) throw new NotFoundException('Customer does not exist');
    return res.status(HttpStatus.OK).json(
        message: 'User has been deleted',
        user
    )
   

服务

 // Edit user details
async updateUser(userID, createUserDto: CreateUserDto): Promise<User> 
    const updatedUser = await this.userModel
        .findByIdAndUpdate(userID, createUserDto,  new: true );
    return updatedUser;


// Delete a customer
async deleteUser(userID): Promise<any> 
    const deletedUser = await this.userModel
        .findByIdAndRemove(userID);
    return deletedUser; 

我正在大摇大摆地进行测试。我将id作为参数来查找和更新用户。

答案

基于您的代码存储库,您不是在使用URL参数,而是在使用查询参数。两者的区别在于它们如何传递到服务器以及如何告知服务器以侦听它们。

查询参数

具有查询参数,您可以将它们传递到服务器,从URL中的?开始,然后通过使用&进行串联。一个示例可能类似于http://localhost:3000?name=Test&id=a26408f3-69eb-4443-8af7-474b896a9e70。请注意,有两个查询参数,一个名为name,一个名为id。在Nest中,要在路由处理程序中获取这些参数,可以使用@Query()装饰器。示例类可能看起来像

@Controller()
export class AppController 

  @Get()
  getHello(@Query() query:  name: string, id: string ) 
    return `Hello $name, your ID is $id`;
  

注意上面的URL,调用的路由是基本路由(/),并添加了查询参数。

URL参数

URL参数是一种动态构建路由的方法,无需指定每个可能的URL。这对于动态生成的ID之类的东西很有用。采用与上述类似的URL,这次的示例URL可能类似于http://localhost:3000/Test/a26408f3-69eb-4443-8af7-474b896a9e70。请注意,这次是没有?&的样子,只是看起来像一个完整的URL。要在嵌套中指定URL参数,您需要在资源声明装饰器中的参数名称前加一个冒号(:),以及必要的路径的其他任何部分。然后,要访问URL参数,您需要在路由处理程序中使用@Param()装饰器,类似于使用@Query()装饰器的方式。该类的示例将是

@Controller()
export class AppController 

  @Get(':name/:id')
  getHello(@Param() params:  name: string, id: string )
    return `Hello $name, your ID is $id`;
  

以上是关于Nestjs:无法输入,无法删除(找不到404)的主要内容,如果未能解决你的问题,请参考以下文章

进入form.html页面后输入用户名密码之后提交进入下一页面找不到出现404

Github 页面 404 找不到文件

Nestjs 错误:找不到模块“./app.controller”

找不到页面(404):django无法匹配路径

Worklight 部署的应用程序无法运行并出现“错误 404:SRVE0190E:找不到文件:/”

ASP.NET MVC 页面无法加载并显示“找不到资源”