Angular 角度5 nginx mongoose docker错误\u空\u响应

Angular 角度5 nginx mongoose docker错误\u空\u响应,angular,docker,nginx,mongoose,Angular,Docker,Nginx,Mongoose,通过下面的设置,我可以看到我的网站,但是当我尝试注册时,我得到了一个ERR_EMPTY_响应 注册时,我向API.js发出HTTP请求 它在user.js中创建/更新模式 这在不使用Docker/nginx时正常工作。 我尝试直接连接到容器图像“mongo”,我尝试了0.0.0.0:27017 ,但我感觉我的app.js最初并没有连接到Mongodb。 即使到/main/profile等的路由工作正常。所以我假设app.js是通过index.html调用的 我有一种感觉,这是一件小事,使这项工作

通过下面的设置,我可以看到我的网站,但是当我尝试注册时,我得到了一个ERR_EMPTY_响应

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

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

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

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;"]
docker-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"
梅因酒店


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

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

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


然后运行
docker compose build
docker compose up
,它应该连接。

图像mongo未连接

你应该使用

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

要连接到数据库。

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

为了注册到mongodatabase,我正在对api执行以下操作

 let url = 'http://localhost:3000/api/register';
 return this.http.post(url, user)
我可以通过执行以下操作连接到容器中的mongodbmongo://0.0.0.0:27017 从D:/mongodb/bin文件夹。它确实给了我一个警告:没有为数据库启用访问控制

我关掉了防火墙,没有抗病毒药物

我在谷歌上搜索了我收到的访问控制警告,这似乎表明我需要在mongodb上创建一个授权帐户? 即使在没有docker/nginx的情况下,使用Mongoose也需要这样做,我没有这个问题。也许这与mongodb的形象有关

我通过登录数据库添加了一个管理员帐户: $use LOGINAP $db.createUser( { 用户:“用户名”, 密码“, 角色:[{role:“root”,db:“admin”}] })

现在我可以在没有acces control is not enabled(访问控制未启用)消息的情况下连接到数据库,但是当我尝试注册时,仍然得到相同的ERR\u empty\u响应。那么,有没有办法完全摆脱访问控制,或者我必须在mongoose的模式中添加一些东西,以便在LoginApp上尝试更改或创建一个用户时,它能够正确地进行身份验证

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

下面的图片是我现在得到的,但是访问猫鼬数据库仍然不起作用


我尝试了上述方法,但没有效果,我添加了一个usera帐户以解决用户允许的访问问题,该问题现已消失,但在尝试访问mongodb服务器时,我仍然收到一条err empty消息。是否有办法关闭mongodb上的访问控制,或者mongoose无法在mongodb上工作的原因是什么。当它登录mongodb时,你能给出堆栈跟踪吗?如果不看到错误,真的很难帮上忙。嗨,迈克。我将尝试找出如何获取stacktrace,当涉及到http调用时,我从浏览器控制台得到的警告通常提供很少的信息。有没有办法从服务器api.js获取更多stacktrace信息?例如,当我将一个console.log放在api调用的方法中时,我根本看不到日志。我不擅长调试,因为您可能会看到未能加载资源:net::ERR_EMPTY_RESPONSE main.1562976…bundle.js:1 t error:ProgressEvent{isTrusted:true,LengthComputeable:false,loaded:0,total:0,type:“error”,…}头:e{normalizedNames:Map(0),lazyUpdate:null,头:Map(0)}消息:“Http的失败响应”(未知url):0未知错误”名称:“HttpErrorResponse”确定:错误状态:0状态文本:“未知错误”url:null proto:ObjectHi Roman,刚刚注意到在输出中,它是关于dbpath=data/db的,我以为你指的是数据库名loginapp。因此在我的例子中,我创建了一个loginapp(使用loginapp)正确的行是:connect.connect('mongodb:27017//localhost/db/loginapp')吗?
mongo:
  environment:
  - MONGO_INITDB_ROOT_USERNAME=username
  - MONGO_INITDB_ROOT_PASSWORD=password
image: mongo
ports: 
- "27017:27017"