angular - node.js, HttpClient положил соединение успешно, но не сработало - PullRequest
0 голосов
/ 23 января 2019

Я пытался использовать angular HttpClient get, delete, post для подключения к API node.js, все успешно.

Но когда я подключился с 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 =>{

      });
    }

Узел.js put API /api/edit/:id:

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

Рабочий сервер cmd сервера node.js отображает как этот журнал:

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

Ноне показывать "edit api connected!";Я не знаю, почему отображается OPTIONS.Это может произойти с другими методами, такими как DELETE, но это не влияет на работу.

Я пытаюсь использовать почтальон для подключения того же AIP, Это работает, журнал выглядит так:

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

Я попытался изменить маршрутизатор: /api/edit/ (без параметров), просто не могу работать.

1 Ответ

0 голосов
/ 23 января 2019

Когда вы отправляете запросы через chrome или другие браузеры (используя angular 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 в вашем случае.В Postman нет опций предварительного полета, поэтому он работает.

Для того, чтобы ваш сервер 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...