показ всей коллекции из mongodb с помощью приложения nodejs - PullRequest
0 голосов
/ 20 апреля 2020

Я пытаюсь создать простое приложение nodesjs, которое показывает всю коллекцию из существующей базы данных mongodb, используя docker, я создал приложение nodejs и докертизировал его, я также создал сеть, которая включает в себя контейнеры как приложения nodesjs, так и существующей базы данных mongodb. соединение было успешно установлено, но по какой-то причине я не получил никаких результатов. ниже вы найдете код, который я использовал для создания своего простого приложения:

База данных, к которой я пытаюсь подключиться, называется crawlab_test, а коллекция, которую я пытаюсь показать в приложении nodejs, называется resultnews.

(Когда я получаю доступ к http://localhost: 5001 / , я получаю результат, говорящий Cannot GET /, но когда я пытаюсь получить доступ к http://localhost: 5001 / resultnews , чтобы показать коллекцию используя мое приложение nodejs, я ничего не получаю.)

мой сервер. js file:

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");
  });
});

я создал папку с именем sr c, внутри нее я создал два файла:

my 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;

И мое соединение. js file:

// 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;

Вот файл Docker, который я использовал:

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 сеть создает новые для создания сети,

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, но я не могу найти ее. заранее благодарю всех, кто может мне помочь с этой проблемой.

1 Ответ

0 голосов
/ 20 апреля 2020

Поскольку это const Resultnews = require("./src/Resultnews.model");

Но результат в app.get() равен resultnews.

Один начинается с заглавной буквы, а второй начинается со строчной буквы.

ОБНОВЛЕНИЕ:

При работе на Docker для Win или Docker для Ma c, вы можете использовать hostname 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/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...