angular 5 nginx mongoose docker ERR_EMPTY_RESPONSE

问题描述 投票:1回答:3

通过以下设置,我可以看到我的网站,但是当我尝试注册时,我收到了ERR_EMPTY_RESPONSE。

当我注册时,我正在向API.js发出HTTP请求,该请求在user.js中创建/更新Schema。这通常在不使用Docker / nginx时有效。我尝试直接连接到容器Image“mongo”,我尝试了0.0.0.0:27017,但我感觉我的app.js最初没有连接到Mongodb。即使路由到/ main / profile等也有效。所以我假设app.js已通过index.html调用

我觉得做这项工作是一件小事,但现在花了几个小时我才挣扎。我不使用cors,因为我使用的是nginx。我对这些概念很陌生,但我认为nginx作为反向代理不使用cors?

在docker-compose.yml中,当我将Volume的目录更改为不存在的内容时,没有任何更改我仍然可以看到我的网站,就好像它没有做任何事情,但是当我删除它给我的句子时失败所以它被调用。不完全确定卷在此文件中的作用。

docker ps给我以下输出:

 CONTAINER    ID             IMAGE  COMMAND           CREATED           STATUS              PORTS             NAMES

 f58507ed0205 meanchat_web   "nginx -g 'daemon ..."   55 seconds ago      Up 54 seconds       0.0.0.0:80->80/tcp               meanchat_web_1

 cddfd8180f1b        meanchat_node       "nginx -g 'daemon ..."   2 hours ago         Up 55 seconds       80/tcp, 0.0.0.0:3000->3000/tcp   meanchat_node_1

 79a013dd4e51        mongo               "docker-entrypoint..."   2 hours ago         Up 55 seconds       0.0.0.0:27017->27017/tcp         meanchat_mongo_1

app.js

 var mongo= require('mongodb');

//var cors = require('cors');
 var mongoose = require('mongoose');

 var connect = require('./models/user')
 connect.connect('mongodb://localhost/loginapp');
 var db = mongoose.connection;

user.js的

 module.exports.connect = function(mongoUri, promiseLib){

 var mongoDB = mongoose.connect(mongoUri);
  return mongoDB
  };

DockerFile:

 ### STAGE 1: Build ###

 # We label our stage as ‘builder’
 FROM node:8.1.4-alpine as builder

 COPY package.json package-lock.json ./

 ## Storing node modules on a separate layer will prevent unnecessary 
 pm installs at each build
 RUN npm i && mkdir /ng-app && cp -R ./node_modules ./ng-app

 WORKDIR /ng-app

 COPY . .

 ## Build the angular app in production mode and store the artifacts
 in dist folder
 RUN $(npm bin)/ng build --prod
 ### STAGE 2: Setup ###

 FROM nginx:1.13.3-alpine

 ## Copy our default nginx config
 COPY nginx/default.conf /etc/nginx/conf.d/

 ## Remove default nginx website
 RUN rm -rf /usr/share/nginx/html/*

 ## From ‘builder’ stage copy over the artifacts in dist folder to default
 nginx public folder
 COPY --from=builder ./dist /usr/share/nginx/html

 CMD ["nginx", "-g", "daemon off;"]

泊坞窗,compose.yml

 version: '3'
 services:
 web:
  build: ./
  ports:
  - "80:80"
  links:
  - node
  volumes:
   - "./dist :/usr/share/nginx/html"
 node:
  build: ./
  ports:
  - "3000:3000"
   links:
   - mongo
 mongo:
 image: mongo
 ports: 
 - "27017:27017"

main.ts

enter image description here

angular docker nginx mongoose
3个回答
1
投票

我可以从compose输出中看到mongo没有在你的app.js中正确连接。

将此行connect.connect('mongodb://localhost/loginapp');更改为

connect.connect('mongodb://mongo/loginapp');

然后运行docker-compose builddocker-compose up它应该连接。


0
投票

图像mongo未连接。

你应该用

connect.connect('mongodb:27017//localhost/db'); 

连接到数据库。


0
投票

我尝试了两个选项,但结果似乎相同,我再次发送输出。我确实做了你提到的docker-compose build和docker-compose up。

我正在做以下内容到api以注册到mongodatabase。

 let url = 'http://localhost:3000/api/register';
 return this.http.post(url, user)

我可以通过从D:/ mongodb / bin文件夹执行mongo://0.0.0.0:27017来连接到容器中的mongodb。它确实给了我警告:没有为数据库启用访问控制。

我关闭防火墙,没有antivir活动atm。

我用谷歌搜索了我得到的访问控制警告,这似乎表明我需要在mongodb上创建一个授权帐户?甚至在使用Mongoose时也是如此,没有docker / nginx我没有这个问题。也许它与mongodb的形象有关?

我通过登录数据库添加了一个管理员帐户:$ use loginapp $ db.createUser({user:“username”,pwd:“password”,roles:[{role:“root”,db:“admin”}]} )

mongo:
  environment:
  - MONGO_INITDB_ROOT_USERNAME=username
  - MONGO_INITDB_ROOT_PASSWORD=password
image: mongo
ports: 
- "27017:27017"

现在我能够连接到数据库,而没有启用访问控制消息,但是当我尝试注册时,我仍然得到相同的ERR_empty_response。那么有没有办法完全摆脱访问控制或者我必须在mongoose的架构中添加一些东西,以便当我尝试在LoginApp上更改或创建用户时,它是否正确进行身份验证?

newUser.save forinstance现在可能无法正常工作,因为它需要单独的身份验证?

下面的图片是我现在得到的,但是到mongoose数据库的到达仍然不起作用。

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.