有关在Node.js中连接MongoDB时的身份验证,可以这样表达:当使用Node.js连接MongoDB进行身份验证时

想做的事情 zuò de shì

我想创建一个Docker容器来运行Node,并访问MongoDB容器。但有时候无法连接(身份验证失败),所以我想介绍三种解决方法。
由于我是Node.js初学者,所以我的写法可能不太好,可能会觉得这些方法不实用。希望能得到您的指导。

关于实施

节点:我想在Node.js的容器中访问MongoDB的容器并进行各种操作
mongodb:在mongo的容器中作为数据库服务器

暫時先提供一份 docker-compose 文件。

version: "3.8"

services:

  mongodb:
    container_name: "mongodb"
    hostname: "mongodb"
    image: mongo:5.0.5
    restart: always
    ports:
      - 27017:27017
    volumes:
      - ./mongodb_db:/data/db
      - ./mongodb_configdb:/data/configdb
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: password

  node:
    container_name: "node"
    hostname: "node"
    image: node:17.3
    tty: true
    restart: always
    ports:
      - 3000:3000
    volumes:
      - ./node_src:/src
    working_dir: "/src/"

关于认证方法的事项

第一种方法

在连接时进行身份验证的方法是在URI中提供登录用户名和密码。
在不使用Docker并在本地执行的情况下(连接到localhost数据库时),您可以使用以下方法进行连接。

const MongoClient = require('mongodb').MongoClient;
const uri = "mongodb://root:password@localhost:27017";

.....

MongoClient.connect(uri, (err, client) => {
  .....
  collection.find(query).toArray((err, result) => {
    .....
  }
}

第二种方法

在创建实例时,通过在URI中包含登录用户名和密码来进行身份验证的方法。我在看官方的insertOne()示例代码时使用了这种方法。

import { MongoClient } from "mongodb";
const uri = "mongodb://root:password@mongodb:27017";
const client = new MongoClient(uri);

.....

await client.connect();
const database = client.db("insertDB");
const haiku = database.collection("haiku");
const result = await haiku.insertOne(doc);

.....

第三种方法 (dì

請在options中輸入用戶名和密碼,以認證的方式進行連接。如果想要了解更詳細的選項,請點擊此處。

const uri = "mongodb://mongodb:27017",
const options = {
  useNewUrlParser: true,
  useUnifiedTopology: true,
  auth: {
    username: "root",
    password: "password"
  }
}

.....

MongoClient.connect(uri, options,  (err, client) => {
  .....
  collection.find(query).toArray((err, result) => {
    .....
  }
}

最后

我觉得不仅仅有三种方法,还有其他的方法。
有很多认证方法,有点难。。。

广告
将在 10 秒后关闭
bannerAds