Dotenv没有正确加载

sof*_*ode 5 javascript environment-variables node.js

我试图使用process.env加载的一些环境变量访问dotenv.

我的文件夹结构:

.env
src
-- - server.js
Run Code Online (Sandbox Code Playgroud)

我的server.js配置:

(...)
import auth from './middleware/auth'
import dotenv from 'dotenv'
dotenv.load({
    path: '../',
    silent: process.env.NODE_ENV === 'production'
})
auth()
// Instantiate app
const app = express();
Run Code Online (Sandbox Code Playgroud)

我尝试访问process.env变量的文件:

(...)
module.exports = function() {
        console.log("env", process.env.MONGODB_URI)
        var options = {};
        options.jwtFromRequest = ExtractJwt.fromAuthHeader()
        options.secretOrKey = process.env.JWT_SECRET
Run Code Online (Sandbox Code Playgroud)

哪个日志env, undefined,然后崩溃

TypeError: JwtStrategy requires a secret or key

即使我移动.envsrc(同一目录服务器)和删除pathconfig,它失败.

yBr*_*sky 5

看来,当您指定路径时,需要将其填满:

require('dotenv').config({path: __dirname + '/../.env'});
Run Code Online (Sandbox Code Playgroud)

.env是你的档案

  • 谢谢你再次回答男人.这不起作用 (2认同)

小智 5

尝试这个; 这应该有效。

import {} from 'dotenv/config'
import somethingElse from 'somethingElse'
...
[the rest of your code]
Run Code Online (Sandbox Code Playgroud)

这是因为 ES6 模块导入模块的方式。

如果你想深入挖掘更多。 请参考这个。https://hacks.mozilla.org/2015/08/es6-in-deep-modules/

总结一下:

当您运行包含导入声明的模块时,首先加载它导入的模块,然后在依赖关系图的深度优先遍历中执行每个模块主体,通过跳过任何已执行的内容来避免循环。

希望这会对某人有所帮助。