首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用nodejs应用程序显示来自mongodb的整个集合

使用nodejs应用程序显示来自mongodb的整个集合
EN

Stack Overflow用户
提问于 2020-04-20 05:43:47
回答 1查看 51关注 0票数 0

我试图做一个简单的nodesjs应用程序,使用docker显示现有mongodb数据库中的整个集合,我已经创建了nodejs应用程序并将其对接,我还创建了一个网络,其中包括nodesjs应用程序和现有mongodb数据库的容器。连接已成功建立,但由于某种原因,我没有得到任何结果。你可以在下面找到我用来构建我的简单应用的代码:

我尝试连接的数据库名为crawlab_test,而我试图在nodejs应用程序上显示的集合名为resultnews。

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

我的server.js文件:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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文件:

代码语言:javascript
复制
// 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:

代码语言:javascript
复制
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 network create enews创建网络,

docker network connect crawlab_mongo_1将已有的mongodb容器添加到我的网络中。

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

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

ps :这个应用程序在使用本地mongodb数据库时运行得很好,所以我猜问题出在我的docker run命令上,但我似乎找不到它。对于可能帮助我解决这个问题的每个人,我要提前感谢你们。

EN

回答 1

Stack Overflow用户

发布于 2020-04-20 17:09:54

因为它是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/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61312018

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档