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
但是,在测试步骤中,会记录一条错误消息:
(节点:2158)未处理的PromiseRejectionWarning:MongoError:身份验证失败。
我在 nodejs 旁边使用 mongoose,所以这是负责身份验证的代码:
mongoose.connect(process.env.MONGO_URL, {
    useUnifiedTopology: true,
    useNewUrlParser: true
});
我不认为我的连接 uri 是错误的,但我不确定身份验证失败的原因。
小智 1
嘿,这有点晚了,但也许会对某人有所帮助。对我来说,我authSource=admin在 MongoDB 连接 URL 中包含了作为查询参数并且它有效,下面是一个示例:
mongodb://${MONGODB_USERNAME}:${MONGODB_PASSWORD}@localhost:${MONGODB_PORT}/${MONGODB_DB}?authMechanism=DEFAULT&authSource=admin;
我不必包含${MONGODB_DB}在连接字符串中并为其创建一个环境变量,只有当您想使用自定义数据库名称时才这样做。
我通过使用 MongoDB Compass 了解到了这一点,这是一个免费的本机 GUI 应用程序,可让您连接到 MongoDB 数据库:https://www.mongodb.com/products/compass
| 归档时间: | 
 | 
| 查看次数: | 335 次 | 
| 最近记录: |