有关在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) => {
.....
}
}
最后
我觉得不仅仅有三种方法,还有其他的方法。
有很多认证方法,有点难。。。