Symfony+Angular项目获取用户时出现404错误(/user/NaN)求助
解决Angular + Symfony交互的404(/user/NaN)问题
看起来你遇到的核心问题有两个:请求路径不匹配后端路由,以及userId转换为NaN导致无效请求,咱们一步步来解决:
1. 修复请求路径不匹配的问题
首先看你的Symfony路由配置,pr_manager_update的路径是/user/update/{id},但Angular服务里拼接的URL是http://localhost/project-manager/backend/web/app_dev.php/user/{id}——这里明显少了/update后缀,所以后端找不到对应的路由,这是404的主要原因之一。
修改Angular服务的代码,让请求路径匹配后端路由:
// 方案一:修改静态变量,加入/update static USER_ID = 'http://localhost/project-manager/backend/web/app_dev.php/user/update'; getUserById(id: number) { return this.http.get(Statique.USER_ID + '/' + id); } // 或者方案二:在方法里拼接/update getUserById(id: number) { return this.http.get(`${Statique.USER_ID}/update/${id}`); }
2. 解决userId变为NaN的问题
错误提示里的/user/NaN说明你传入的id不是有效数字,根源在于从localStorage获取的editUserId可能未正确设置,或者转换时失败:
第一步:确保在跳转编辑页时正确存入userId
在列表页点击编辑按钮时,一定要把字符串格式的数字存入localStorage:
// 示例:列表组件的编辑按钮点击事件 editUser(userId: number) { localStorage.setItem("editUserId", userId.toString()); // 必须转成字符串 this.router.navigate(['edit-user']); }
第二步:在EditComponent中加强userId校验
当前代码只判断了!userId,但如果userId是空字符串、非数字字符串(比如"abc"),+userId会变成NaN,所以要增加有效性校验:
ngOnInit() { const userIdStr = localStorage.getItem("editUserId"); // 检查是否存在,同时检查是否能转换为有效数字 if(!userIdStr || isNaN(+userIdStr)){ alert("Erreur : ID utilisateur invalide"); this.router.navigate(['liste-user']); return; } const userId = +userIdStr; // 确认是有效数字后再转换 // 后续表单初始化和请求代码不变 this.updateForm = this.formBuilder.group({ id: [], nom: ['', Validators.required], prenom: ['', Validators.required], tel: ['', Validators.required], mail: ['', Validators.required], domaine: ['', Validators.required], }); this.createService.getUserById(userId) .subscribe(data => {this.updateForm.setValue(data);}); }
3. 额外检查:后端方法的请求方式
确保Symfony的UserController::update方法支持GET请求(因为你前端用的是http.get),可以在路由配置里添加methods:
pr_manager_update: path: /user/update/{id} defaults: { _controller: PrManagerBundle:User:update} methods: [GET, POST] # 明确支持GET和POST
或者在控制器的注解里指定:
/** * @Route("/user/update/{id}", name="pr_manager_update", methods={"GET", "POST"}) */ public function update(Request $request, $id) { // 你的获取用户逻辑,最后返回JSON $user = $this->getDoctrine()->getRepository(User::class)->find($id); return $this->json($user); }
做完这些修改后,应该就能正常获取用户数据了~
内容的提问来源于stack exchange,提问作者dakim236
相关产品推荐
相关产品推荐

