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

时间:2019-01-23 08:39:14

标签: node.js angular express

我尝试使用成角度的HttpClient getdeletepost连接到node.js API,一切都成功。

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

例如:

以角形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窗口显示如下:

OPTIONS /api/edit/5c481dedbe234c2dec23c6a0 200 1.333 ms - 3

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

我尝试使用postman连接相同的AIP,工作正常,日志如下:

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

我尝试更改路由器:/api/edit/(无参数),只是无法工作。

1 个答案:

答案 0 :(得分:3)

当您通过Chrome或其他浏览器(使用有角度的httpclient)将请求发送到其他域(来源不同)时,将有两个请求。第一个是OPTION的飞行前请求,用于检查服务器端允许使用哪些方法(GET,PUT,POST等)。一个OPTION请求期望带有CORS标头的响应:

示例:

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。有了邮递员,没有飞行前的选项,这就是它起作用的原因。

要使您的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