nginx端口重定向发送空的json对象
我有一个带有nginx'网关'的docker-compose应用程序,它将请求从端口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;
}
}
和Dockerfile:
FROM nginx
COPY ./default.conf /etc/nginx/conf.d/default.conf
泊坞窗 - 撰写:
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'
我试图在api思想邮递员中插入数据并且它成功了。但是,当从客户端发出简单的axios帖子时,服务器会收到一个空对象。
前端:
axios.post('/api/example/', { item: 'something' });
快递 - 猫鼬日志:
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/"
回答如下:
所以,我在'application / x-www-form-urlencoded'而不是'application / json'上使用bodyParser设置Express。新手的错误。