Angular 8中如何通过POST请求获取人脸识别API响应并存储?
解决POST请求获取人脸识别API响应的问题
嘿,我来帮你理清这个事儿~其实你可能误解了POST请求的作用:POST请求既可以发送数据,也完全能接收响应结果,和GET一样,只是请求方式不同而已。下面我针对你的代码一步步调整,让你能通过POST拿到识别结果并判断图像是否被识别:
1. 调整Service层:让方法返回Observable,把响应传递给Component
你当前的sendImage方法只是在内部订阅了POST请求,但没有把结果传递出去。修改成这样,让Component能订阅并获取响应:
sendImage(imgUrl): Observable<any> { console.log(imgUrl); const obj = { url: imgUrl }; // 返回HTTP请求的Observable,让调用者(Component)处理响应 return this.http.post(`${this.uri}`, obj); }
2. 调整Node.js路由:转发Lambda API的响应给前端
你的路由现在只调用了recognizeImg,但没有处理它的返回结果,也没给前端返回响应。假设myFaceDetAPI.recognizeImg是调用Lambda API的异步方法,我们需要把Lambda的识别结果返回给前端:
facedetAPIRoutes.route("/").post(async function (req, res) { let imageUrl = req.body.url; try { // 等待Lambda API的识别结果(假设recognizeImg返回Promise) const recognitionResult = await myFaceDetAPI.recognizeImg(imageUrl); // 将Lambda的响应原样返回给前端 res.status(200).json(recognitionResult); } catch (error) { // 处理请求失败的情况,返回错误信息 res.status(500).json({ error: "请求人脸识别API失败:" + error.message }); } });
3. 调整Component:订阅响应并判断识别结果
现在你可以在handleImage里订阅sendImage的返回,根据Lambda API返回的结构判断图像是否被识别:
public handleImage(webcamImage: WebcamImage): void { console.info("received webcam image", webcamImage); this.webcamImage = webcamImage; const imageUrl = "http://localhost:4000/uploads/1570563000257-arnold4.jpg"; // 订阅POST请求的响应 this.fda.sendImage(imageUrl).subscribe({ next: (recognitionRes) => { console.log("人脸识别API返回结果:", recognitionRes); // 这里根据Lambda API的返回结构判断,比如假设返回里有`isRecognized`或`matchedFace`字段 if (recognitionRes.isRecognized) { // 替换成实际的判断字段 console.log("✅ 图像已成功识别!"); // 这里可以添加你的业务逻辑,比如弹出提示、跳转页面等 } else { console.log("❌ 图像未被识别"); } }, error: (err) => { console.error("请求出错:", err); } }); }
核心说明
你之前的误区是觉得POST只能发数据,但实际上所有HTTP请求方法(GET/POST/PUT等)都可以同时发送请求数据和接收响应数据。POST的核心是向服务器提交数据,同时服务器自然会返回处理结果,这是标准的HTTP交互流程~
内容的提问来源于stack exchange,提问作者Roger
相关产品推荐
相关产品推荐

