我使用的代码结构如下所示
-.env
-app.js
-build
-src
|-modules
|-users
|-controller
|-userController.js
我在app.js的顶部需要.env
require('dotenv').config();
import express = require('express');
import bodyParser from 'body-parser';
import mongoose = require('mongoose');
process.env.PORT可在我的app.listen函数中使用。但是,在我的userController文件上,不确定这是怎么发生的,但是我的问题是,当我使用console.log()检查时,我正在获取secretKey值并以字符串形式输入,但是在jwt.sign()上尝试时却未定义,例如
console.log('Type: '+ process.env.ACCESS_TOKEN_SECRET)
console.log(process.env.ACCESS_TOKEN_SECRET)
结果:
string
secret
jwt.sign给出错误
let accessToken = jwt.sign(userObj, process.env.ACCESS_TOKEN_SECRET);
错误原为
Argument of type 'string | undefined' is not assignable to parameter of type 'Secret'.
Type 'undefined' is not assignable to type 'Secret'.
我的解决方案:阅读文档后。我再次在文件中要求环境(我可能应该首先拥有它)并将其保存到变量“环境”中
let environment = require('dotenv').config();
控制台日志记录环境提供了:
{
parsed: {
DB_HOST: 'localhost',
DB_USER: 'root',
DB_PASS: 'pass',
PORT: '3000',
ACCESS_TOKEN_SECRET: 'secretKey',
}
}
在jwt.sign上使用它不起作用
let accessToken = jwt.sign(userObj, environment.parsed.ACCESS_TOKEN_SECRET);
希望这会有所帮助,我被困了几个小时。请随时在我的答案中添加任何内容,这可能有助于进一步说明。