Попробуй сделать запрос http api через угловой интерфейс - PullRequest
0 голосов
/ 01 октября 2019

У меня есть контейнер API отдыха в java / spring и контейнер для службы докеров. Веб-интерфейс написан на угловом языке и обслуживается через сервер NGINX. К сожалению, вызов http://service -rest: 8080 / api / call завершается неудачно. Любые идеи по поводу этого

events {
  worker_connections  4096;  ## Default: 1024
}
http {
    server {
        listen 80;
        server_name  service-frontend;

        root   /usr/share/nginx/html;
        index  index.html index.htm;
        include /etc/nginx/mime.types;

        gzip on;
        gzip_min_length 1000;
        gzip_proxied expired no-cache no-store private auth;
        gzip_types text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript;

        location / {
           root   /usr/share/nginx/html;
           index  index.html index.htm;
        }

        location /api {
           proxy_pass http://service-rest:8080;
        } 
    }
}

Бэкэнд-контроллер

@RestController
@RequestMapping("/api")
@CrossOrigin
public class EntityController {

    @Autowired
    private EntityRepository entityRepository;

    @GetMapping("/entities")
    public ResponseEntity<Page<NumberArray>> getEntities() {
        return ResponseEntity.status(HttpStatus.OK).body(entityRepository.findAll(Pageable.unpaged()));
    }

    @PostMapping("/entities")
    public ResponseEntity<Entity> createEntity(@Valid @RequestBody Entity entity) throws JsonProcessingException {

        return ResponseEntity.status(HttpStatus.OK).body(entityRepository.save(entity));
    }

}

docker-compose.yaml

version: "2"
services:
  service-db:
    image: postgres:9.4.5
    container_name: service-db
    hostname: service-db
    network_mode: bridge
    volumes:
      - service-db-data:/var/lib/postgresql/data
    expose:
      - 5432
    ports:
      - 5433:5432
    environment:
         - POSTGRES_PASSWORD=postgres
         - POSTGRES_USER=postgres
         - POSTGRES_DB=postgres
    restart: unless-stopped
  service-server:
    build: serviceserver/.
    container_name: service-server
    hostname: service-server
    network_mode: bridge
    expose:
      - 1234
    ports:
      - 1234:1234
    restart: unless-stopped
  service-rest:
    build: servicerest/.
    container_name: service-rest
    hostname: service-rest

    network_mode: bridge

    expose:
      - 8080
    ports:
      - 8080:8080
    restart: unless-stopped
    depends_on:
      - service-db
    links:
      - service-db
      - service-server
  service-frontend:
    build: servicefrontend/.
    container_name: service-frontend
    hostname: service-frontend
    network_mode: bridge

    restart: unless-stopped
    ports:
      - "81:80"
    depends_on:
      - service-rest
    links:
      - service-rest



volumes:
    service-db-data:

Сообщение браузера Запрос на перекрестное происхождение заблокирован: Политика одинакового происхождениязапрещает чтение удаленного ресурса на http://service -rest: 8080 / api / call . (Причина: запрос CORS не выполнен). Ошибка: «Uncaught (в обещании): sf: {« headers »: {« normalizedNames »: {},« lazyUpdate »: null,« headers »: {}},« status »: 0,« statusText »:»Неизвестная ошибка "," url ":" http://service -rest: 8080 / api / call"," ok ": false," name ":" HttpErrorResponse "," message ":" Реакция отказа Httpдля http://service -rest: 8080 / api / numberarrays : 0 Неизвестная ошибка "," ошибка ": {" isTrusted ": true}}"

1 Ответ

0 голосов
/ 01 октября 2019

Точный HTTP-запрос, например,

  client.get("http//service-rest:8080/api/call")

неправильный

правильный способ - позвонить

   client.get("/api/call")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...