【问题标题】:NodeJS and Express: "Error: self signed certificate"NodeJS 和 Express:“错误:自签名证书”
【发布时间】:2020-08-24 17:19:49
【问题描述】:

我是 NodeJS 的初学者,我有一个非常简单的 Node/Express 应用程序,它使用 PostGreSQL 作为数据库。我的“db.js”文件如下所示:

const { Pool } = require('pg');

module.exports = new Pool({
    user: 'postgres',
    password: 'xxxx',
    host: 'localhost',
    port: 5432,
    database:'gymmanager'
});

当我只在本地运行时,一切正常,所以我决定将应用程序部署到 Heroku。为此,我创建了一个 .env 文件,其中包含用于开发的环境变量。这是 .env 文件:

NODE_ENV=dev
DB_USER='postgres'
DB_PASS='xxxx'
DB_HOST='localhost'
DB_PORT=5432
DB_DATABASE='gymmanager'

我已经更改了我的“db.js”文件,现在看起来像这样:

if(process.env.NODE_ENV !== 'dev') {

    const { Client } = require('pg');

    const client = new Client({  
        connectionString: process.env.DATABASE_URL,
        ssl: true
    });

    client.connect();
    module.exports = client;

} else {

    require('dotenv').config();
    const { Pool } = require('pg');

    module.exports = new Pool({
        user: process.env.DB_USER,
        password: process.env.DB_PASS,
        host: process.env.DB_HOST,
        port: process.env.DB_PORT,
        database: process.env.DB_DATABASE,
        rejectUnauthorized: false
    });    
}

我的应用已部署并在 Heroku 上顺利运行,但现在,当我在本地运行“npm start”时,出现以下错误:

(node:12989) UnhandledPromiseRejectionWarning: Error: self signed certificate
    at TLSSocket.onConnectSecure (_tls_wrap.js:1491:34)
    at TLSSocket.emit (events.js:315:20)
    at TLSSocket._finishInit (_tls_wrap.js:933:8)
    at TLSWrap.ssl.onhandshakedone (_tls_wrap.js:691:12)

我已经尝试了几种解决方案...

Ignore invalid self-signed ssl certificate in node.js with https.request?

nodejs - error self signed certificate in certificate chain

但它们似乎都不起作用。 谁能帮帮我?

提前致谢。 :)

【问题讨论】:

    标签: node.js postgresql express npm


    【解决方案1】:

    你可以试试,export NODE_TLS_REJECT_UNAUTHORIZED=0 在命令行上吗?这会全局设置属性,而不是 process.env["NODE_TLS_REJECT_UNAUTHORIZED"] = 0; 将属性设置为该特定进程。希望你也执行npm config set strict-ssl false

    【讨论】:

    • 我已经尝试过这些命令,但现在我得到了一个不同的错误。它说“错误:密码身份验证失败”,我发现它是因为 Node 没有读取 .env 文件中的 NODE_ENV=dev 变量。当我运行 NODE_ENV=dev npm start 工作时!您是否知道为什么它没有从 .env 文件中获取变量?所有其他环境变量都工作正常。
    • 确保在顶部需要 dotenv 包,因为您已在 .env 文件中声明了 NODE_ENV 属性。您还可以尝试像 config(npmjs.com/package/config) 这样的包来分离开发和生产环境配置。
    • 感谢您的回复!一切正常。但是如果我需要顶部的 dotenv 包,我也需要 Heroku 上的包,因为我对两个应用程序使用相同的“db.js”文件。既然我没有在 Herou 上导入 dotend 包,那不是问题吗?
    • 我建议将包放在顶部并将 NODE_ENV 属性设置为 PROD 以用于 heroku 环境。您可以轻松地为 heroku 设置环境变量。请在此处查看devcenter.heroku.com/articles/…
    猜你喜欢
    • 2018-03-26
    • 2017-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-29
    • 2020-08-30
    相关资源
    最近更新 更多