2

我正在学习 docker,所以我正在关注其中一个视频,它展示了如何在 docker 容器中运行时将您的 js 应用程序与 mongoDB 连接起来。现在我所做的小变化是它显示在系统端口 27017 上连接 mongo,这是默认的 mongo 端口,但问题是我不想连接到我的系统安装的 mongo 而是连接到容器 mongo ,所以为此我决定在端口 3535 上运行 mongo 容器。当我这样做时,mongo-express 成功连接到 mongo,但是当我尝试将它与我的 js 应用程序(使用 mongoose)连接时,它不断显示身份验证错误,我检查了密码是否正确,没有括号问题是他们的,我用来打开我的 docker 容器的命令是

docker run -d -p 3535:27017 --name mongoDB --network databases -e MONGO_INITDB_ROOT_USERNAME=admin -e MONGO_INITDB_ROOT_PASSWORD=admin mongo

另一个 mongo-express 是

docker run -d -p 8081:8081 --name mongoExp --network databases -e ME_CONFIG_BASICAUTH_USERNAME=admin -e ME_CONFIG_BASICAUTH_PASSWORD=admin -e ME_CONFIG_MONGODB_SERVER=mongoDB -e ME_CONFIG_MONGODB_AUTH_USERNAME=admin -e ME_CONFIG_MONGODB_AUTH_PASSWORD=admin mongo-express

我的节点应用程序代码看起来像

const mongoose = require('mongoose');
const {Humans}= require("./models/humans.js")
mongoose.connect('mongodb://admin:admin@localhost:3535/user', {useNewUrlParser: true, useUnifiedTopology: true }).then(()=>{
    console.log("connected to db");
})

let data={
    name:"Vaibhav Jain",
    mob:"9801",
    skills:"coding"
}

const express = require('express')
const app = express();
app.set('view engine', 'ejs');


app.get("/",async(req,res)=>{
    // console.log(Humans);
    // await Humans.insertMany( );
    // await Humans.insertMany({name:"Mobius" , mob:"5908922",skills:"drawing"});
    const result = await Humans.find();
    res.send(result);   
    
})
app.get("/home",(req,res)=>{
    res.render("home", data);
})

app.listen(3000,()=>{
    console.log("listening port");
})
还有一件事我想提一下,我创建了一个用户数据库,其中包含一个人类集合,这一切都是我从 UI 创建的,但我想使用 mongoose 将它连接到我的应用程序,所以对于显示为导入的人类实际上是空模式(从某个地方读到,你可以以这种方式使用现有集合,如果我错了,请在这部分纠正我)只是为了参考,我的码头工人处于这种状态在此处输入图像描述

4

1 回答 1

2

user使用 UI 创建数据库后,您可能还没有为数据库创建用户。在您的情况下,您可以运行此查询来创建普通用户。
> use user
> db.createUser({user: "user", pwd: "user", roles:["dbOwner"]})
之后,您可以user使用此字符串连接到数据库mongodb://user:user@localhost:3535/user

查看文档db.CreateUser

于 2021-12-07T15:32:50.140 回答