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