无法从 strapi database.js 文件中的 .env 文件访问值

Not able to access value from .env file in strapi database.js file

我正在 docker使用 mongodb atlas 托管数据库来构建 strapi 应用程序。当我在 config/database.js 文件中硬编码数据库凭据时,图像工作正常。但我想从 .env 文件中获取这些凭据。根据 strapi 文档,我可以在 database.js 文件中获取这些变量,而无需使用 dotenv 包

https://strapi.io/documentation/developer-docs/latest/setup-deployment-guides/configurations.html#environment-variables

但这显示了以下错误

error Error connecting to the Mongo database. URI does not have hostname, domain name and tld

我尝试使用 dotenv 并使用 process.env 获取变量,但它仍然显示相同的错误。知道我该如何解决这个问题吗?

数据库连接代码

require('dotenv').config()
const {
  DATABASE_HOST,
  DATABASE_USERNAME,
  DATABASE_PASSWORD
} = process.env;

module.exports = ({ env }) =>
  ({
    defaultConnection: 'default',
    connections: {
      default: {
        connector: 'mongoose',
        settings: {
          host: env('DATABASE_HOST', 'open-jade-cms-0.r07jc.mongodb.net'),
          srv: env.bool('DATABASE_SRV', true),
          port: env.int('DATABASE_PORT', 27017),
          database: env('DATABASE_NAME', 'open-jade-cms-dev'),
          username: env('DATABASE_USERNAME', 'open-jade-data-admin'),
          password: env('DATABASE_PASSWORD', 'uppERH7xmydTpXI8')
        },
        options: {
          authenticationDatabase: env('AUTHENTICATION_DATABASE', null),
          ssl: env.bool('DATABASE_SSL', true),
        },
      },
    },
  });

docker 文件

FROM strapi/base

COPY ./ ./

RUN npm install

RUN npm install dotenv

RUN npm run build

CMD ["npm","run", "start:develop"]

您不需要安装 dotenv 包。只要确保你有 .env 就位。像这样:

DATABASE_CLIENT=mongo
DATABASE_NAME=strapi
DATABASE_HOST=mongoexample
DATABASE_PORT=27017
DATABASE_USERNAME=strapi
DATABASE_PASSWORD=password
MONGO_INITDB_ROOT_USERNAME=strapi
MONGO_INITDB_ROOT_PASSWORD=password

在本地 运行 strapi 时使用 docker-compose 是个好主意

version: "3"

services:
  strapiexample:
    image: strapi/strapi
    container_name: strapiexample
    restart: unless-stopped
    env_file: .env
    environment:
      DATABASE_CLIENT: ${DATABASE_CLIENT}
      DATABASE_NAME: ${DATABASE_NAME}
      DATABASE_HOST: ${DATABASE_HOST}
      DATABASE_PORT: ${DATABASE_PORT}
      DATABASE_USERNAME: ${DATABASE_USERNAME}
      DATABASE_PASSWORD: ${DATABASE_PASSWORD}
    networks:
      - strapi-app-network
    volumes:
      - ./app:/srv/app
    ports:
      - "1337:1337"

以上内容摘自strapi blogs