gpt4 book ai didi

node.js - angular - node.js,HttpClient 连接成功但没有成功

转载 作者:太空狗 更新时间:2023-10-29 18:22:10 24 4
gpt4 key购买 nike

我尝试使用 Angular HttpClient getdeletepost 连接到 node.js API , 全部成功。

但是当我用put方法连接时,发现可以连接,但是没有其他反射。

例如:

Angular put 连接/api/edit/:id

import { HttpClient } from "@angular/common/http";

constructor( private http: HttpClient,) { }

editData(data: any, id: any){
this.http.put<any>(this.Url + "/api/edit/" + id, data).subscribe(res =>{

});
}

Node.js put API /api/edit/:id:

router.put('/api/edit/:id', (req, res, next) => {
console.log("edit api connected!");
res.status(200).json();
});

工作的 node.js 服务器 cmd 窗口显示如下日志:

选项/api/edit/5c481dedbe234c2dec23c6a0 200 1.333 毫秒 - 3

但不显示"edit api connected!";我不知道为什么显示OPTIONS。这可能会发生在其他方法中,例如 DELETE,但不会影响操作。

我尝试使用 postman连接相同的 AIP,它的工作,日志是这样的:

edit api connected!
PUT /api/edit/testid 200 0.635 ms - -

我曾尝试更改路由器:/api/edit/(不带参数),但无法正常工作。

最佳答案

当您通过 chrome 或其他浏览器(使用 angular httpclient)向不同域(不同源)发送请求时,将有两个请求。第一个是 OPTION 飞行前请求,用于检查服务器端允许使用哪些方法(GET、PUT、POST 等)。 OPTION 请求需要带有 CORS header 的响应:

例如:

Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: accept, authorization, content-type, x-requested-with, user-id
Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, DELETE
Access-Control-Allow-Origin: *
Access-Control-Max-Age: 1
Allow: HEAD, GET, OPTIONS

在您的情况下,当此请求失败时,浏览器不会发送实际请求 PUT。对于 Postman,飞行前没有 OPTIONS,这就是它起作用的原因。

要让您的 node.js 服务器与 Angular 一起工作,您必须使用 cors 中间件,例如:

var express = require('express')
var cors = require('cors')
var app = express()

app.use(cors())

更多信息在这里:https://expressjs.com/en/resources/middleware/cors.html

关于node.js - angular - node.js,HttpClient 连接成功但没有成功,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54323081/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com