У меня есть приложение docker-compose с nginx 'gateway', которое перенаправляет запрос с порта 3000 на порт 5000, но отправляет пустой объект.
Когда контейнер на порту 3000 отправляет запрос в «/ api / example», контейнер nginx перенаправит запрос в контейнер на порту 5000, который сохранит объект в базе данных.
это файл конфигурации nginx:
upstream client {
server client:3000;
}
upstream api {
server api:5000;
}
server {
listen 80;
location / {
proxy_pass http://client;
}
location /api {
rewrite /api/(.*) /$1 break;
proxy_pass http://api;
}
}
и файл Docker:
FROM nginx
COPY ./default.conf /etc/nginx/conf.d/default.conf
docker-compose:
version: '3'
services:
mongo:
container_name: mongo
restart: always
image: mongo
env_file: .env
environment:
environment:
MONGO_INITDB_ROOT_PASSWORD: ${MONGO_USER}
MONGO_INITDB_ROOT_USERNAME: ${MONGO_PASSWORD}
MONGO_INITDB_DATABASE: ${MONGO_DATABASE}
volumes:
- ./mongoUser.js:/docker-entrypoint-initdb.d/001_users.js:ro
- ./mongodb:/data/db
ports:
- '27017:27017'
api:
env_file: .env
build:
dockerfile: Dockerfile
context: ./api
links:
- mongo
depends_on:
- mongo
volumes:
- /node_modules
- ./api:/app
environment:
- MONGO_USER=${MONGO_USER}
- MONGO_PASSWORD=${MONGO_PASSWORD}
- MONGO_DATABASE=${MONGO_DATABASE}
client:
build:
dockerfile: Dockerfile
context: ./client
volumes:
- /app/node_modules
- ./client:/app
nginx:
restart: always
depends_on:
- mongo
- api
- client
build:
dockerfile: Dockerfile
context: ./nginx
ports:
- '80:80'
I 'Мы попытались вставить данные в API почтальона, и это удалось.Однако при создании простого сообщения Axios от клиента сервер получает пустой объект.
front-end:
axios.post('/api/example/', { item: 'something' });
express - журналы mongoose:
api_1 | posting: {} // This is the body of the request.
api_1 | { ValidationError: item validation failed: item: Path `item` is required.
api_1 | at ValidationError.inspect (/node_modules/mongoose/lib/error/validation.js:59:24)
api_1 | at formatValue (internal/util/inspect.js:521:31)
api_1 | at inspect (internal/util/inspect.js:196:10)
api_1 | at Object.formatWithOptions (util.js:84:12)
api_1 | at Console.(anonymous function) (internal/console/constructor.js:274:15)
api_1 | at Console.log (internal/console/constructor.js:283:59)
api_1 | at newItem.save.then.catch.err (/controllers/example.js:21:27)
api_1 | at processTicksAndRejections (internal/process/next_tick.js:81:5)
api_1 | errors:
api_1 | { item:
api_1 | { ValidatorError: Path `item` is required.
api_1 | at new ValidatorError (/node_modules/mongoose/lib/error/validator.js:29:11)
api_1 | at validate (/node_modules/mongoose/lib/schematype.js:926:13)
api_1 | at /node_modules/mongoose/lib/schematype.js:979:11
api_1 | at Array.forEach (<anonymous>)
api_1 | at SchemaString.SchemaType.doValidate (/node_modules/mongoose/lib/schematype.js:935:19)
api_1 | at /node_modules/mongoose/lib/document.js:1936:9
api_1 | at processTicksAndRejections (internal/process/next_tick.js:74:9)
api_1 | message: 'Path `item` is required.',
api_1 | name: 'ValidatorError',
api_1 | properties: [Object],
api_1 | kind: 'required',
api_1 | path: 'item',
api_1 | value: undefined,
api_1 | reason: undefined,
api_1 | [Symbol(mongoose:validatorError)]: true } },
api_1 | _message: 'item validation failed',
api_1 | name: 'ValidationError' }
nginx_1 | 172.18.0.1 - - [18/Feb/2019:01:07:28 +0000] "POST /api/example/ HTTP/1.1" 504 569 "http://localhost/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36" "-"
nginx_1 | 2019/02/18 01:07:28 [error] 7#7: *4 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 172.18.0.1, server: , request: "POST /api/example/ HTTP/1.1", upstream: "http://172.18.0.4:5000/example/", host: "localhost", referrer: "http://localhost/"