Abi*_*eer 5 mongoose mongodb node.js docker github-actions
在我的 CI 中,我需要确保我的代码与 mongo 一起使用,因此我使用官方 mongo docker 映像并将所需的凭据作为 mongo 映像的环境变量传递。
build-on-mongo:
runs-on: ${{ matrix.os }}
env:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: password
MONGO_INITDB_DATABASE: vote-stuysu-org
services:
mongo:
image: mongo
ports:
# Maps tcp port 27017 on service container to the host
- 27017:27017
strategy:
matrix:
os: [ubuntu-20.04]
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v1
with:
node-version: '14.x'
- name: Install dependencies
run: npm install
- name: Test
run: npm test
env:
MONGO_URL: mongodb://root:password@localhost:27017/vote-stuysu-org
Run Code Online (Sandbox Code Playgroud)
但是,在测试步骤中,会记录一条错误消息:
(节点:2158)未处理的PromiseRejectionWarning:MongoError:身份验证失败。
我在 nodejs 旁边使用 mongoose,所以这是负责身份验证的代码:
mongoose.connect(process.env.MONGO_URL, {
useUnifiedTopology: true,
useNewUrlParser: true
});
Run Code Online (Sandbox Code Playgroud)
我不认为我的连接 uri 是错误的,但我不确定身份验证失败的原因。
小智 1
嘿,这有点晚了,但也许会对某人有所帮助。对我来说,我authSource=admin在 MongoDB 连接 URL 中包含了作为查询参数并且它有效,下面是一个示例:
mongodb://${MONGODB_USERNAME}:${MONGODB_PASSWORD}@localhost:${MONGODB_PORT}/${MONGODB_DB}?authMechanism=DEFAULT&authSource=admin;
Run Code Online (Sandbox Code Playgroud)
我不必包含${MONGODB_DB}在连接字符串中并为其创建一个环境变量,只有当您想使用自定义数据库名称时才这样做。
我通过使用 MongoDB Compass 了解到了这一点,这是一个免费的本机 GUI 应用程序,可让您连接到 MongoDB 数据库:https://www.mongodb.com/products/compass
| 归档时间: |
|
| 查看次数: |
335 次 |
| 最近记录: |