【问题标题】:showing the entirety of a collection from a mongodb using a nodejs app使用 nodejs 应用程序显示来自 mongodb 的整个集合
【发布时间】:2020-08-02 08:08:20
【问题描述】:

我正在尝试制作一个简单的 nodejs 应用程序,它使用 docker 显示现有 mongodb 数据库的全部集合,我创建了 nodejs 应用程序并将其 dockerized,我还创建了一个包含两个 nodejs 应用程序的容器的网络和现有的mongodb数据库。连接已成功建立,但由于某种原因我没有得到任何结果。 你会在下面找到我用来构建我的简单应用程序的代码:

尝试连接的数据库称为 crawlab_test,尝试在 nodejs 应用上显示的集合称为 resultnews。

( 当我访问 http://localhost:5001/ 时,我得到一个结果,说无法获取 / 但是当我尝试访问http://localhost:5001/resultnews 以使用我的nodejs 应用程序显示集合时,我什么也得不到。 )

我的 server.js 文件:

const Resultnews = require("./src/Resultnews.model");
const express = require("express");
const app = express();
const connectDb = require("./src/connection");
const PORT = 5001;
app.get("/resultnews", async (req, res) => {
  const resultnews = await resultnews.find();
  res.json(resultnews);
});
app.listen(PORT, function () {
  console.log(`Listening on ${PORT}`);
  connectDb().then(() => {
    console.log("MongoDb connected");
  });
});

我在其中创建了一个名为 src 的文件夹,我创建了两个文件:

我的 Resultnews.model.js :

const mongoose = require("mongoose");
const resultnewsSchema = new mongoose.Schema({
  title: String,
  url: String,
  clicks: String,
  task_id: String,
});

const Resultnews = mongoose.model("Resultnews", resultnewsSchema);
module.exports = Resultnews;

还有我的 connection.js 文件:

// connection.js
const mongoose = require("mongoose");
const User = require("./Resultnews.model");
const connection = "mongodb://localhost:27017/crawlab_test";
const connectDb = () => {
  return mongoose.connect(connection, {
    useNewUrlParser: true,
    useUnifiedTopology: true,
  });
};
module.exports = connectDb;

这里是我使用的 Dockerfile:

FROM node:12
# Create app directory
WORKDIR /usr/src/app
# Install app dependencies
COPY package*.json ./
RUN npm install
# Copy app source code
COPY . .
#Expose port and start application
EXPOSE 5001
CMD [ "npm", "start" ]

我在这个项目上使用的 docker 命令是:

docker 网络创建 enews 创建网络,

docker 网络连接 crawlab_mongo_1 将现有的 mongodb 容器添加到我的网络,

docker build -f Dockerfile -t mydockerapp 。 从我的 nodejs 应用程序构建一个容器,最后

docker run -d --net=enews --name mydockerapp -p 5001:5001 mydockerapp 运行容器并添加到我的网络。

ps:应用程序在使用本地 mongodb 数据库时运行良好,所以我猜测问题出在我的 docker run 命令上,但我似乎找不到它。 提前感谢所有可能帮助我解决此问题的人。

【问题讨论】:

  • 你的问题是什么?
  • 显然我的问题是为什么它不工作并且没有在我的 nodejs 应用程序上显示集合
  • 请分享您用于启动 nodejs 和 mongodb 容器的 docker run 命令。
  • 我使用的 docker 命令是:docker network create enews 创建网络,docker network connect crawlab_mongo_1 将现有的 mongodb 容器添加到我的网络,sudo docker build -f Dockerfile -t mydockerapp。从我的 nodejs 应用程序构建一个容器,最后 sudo docker run -d --net=enews --name mydockerapp -p 5001:5001 mydockerapp 运行容器并添加到我的网络

标签: node.js mongodb api docker mongoose


【解决方案1】:

因为是const Resultnews = require("./src/Resultnews.model");

但是app.get() 中的结果是resultnews

一个以大写开头,一个以小写开头。

更新:

在 Docker for Win 或 Docker for Mac 上运行时,您可以使用 容器内的主机名 host.docker.internal 以访问 您主机上的资源:host.docker.internal:27017

在 Linux 上似乎没有这样的功能。但是,一些解决方法 存在,您可以在此问题中找到: https://github.com/docker/for-linux/issues/264

查看这篇文章:https://www.reddit.com/r/docker/comments/a0ge2d/accessing_mongodb_from_docker_container/

【讨论】:

  • 问题不在于上限,因为我在本地测试了应用程序并且一切正常
  • 那么这是一个docker问题。
  • 是的,抱歉,但我没有尝试访问我的主机资源,因为我尝试访问的数据库正在另一个名为 crawlab_mongo_1 的容器内运行,此 mongodb 容器中存在我试图在我的 nodejs 应用程序上打印的集合称为结果新闻。
  • 那你检查了吗? success.docker.com/article/…
  • 是的,在它似乎也不起作用之前我已经尝试过了
猜你喜欢
  • 2016-09-04
  • 2018-03-15
  • 1970-01-01
  • 2018-03-22
  • 1970-01-01
  • 2020-08-08
  • 2017-12-10
  • 2019-10-12
  • 1970-01-01
相关资源
最近更新 更多