0

我找到了一些其他类似的答案,但我对自己理解和正确理解的能力没有信心,所以如果我的方法是正确的,我希望能得到一些验证,因为我拼凑起来的是从一个教程。我还包括了要求,因为我实际上并没有在此文件 (db.js) 中调用 express,但它在其他地方使用:

(PS。我正在部署到 Heroku,并使用 JawsDB 作为我的生产数据库)

require("dotenv").config();
const mysql = require("mysql2");
//const { DatabaseError } = require('pg');

const pool = mysql.createPool({
    host: process.env.DB_HOST,
    user: process.env.DB_USER,
    database: process.env.DB_NAME,
    password: process.env.DB_PASSWORD,
});

这就是我想做的事情:

app.configure('production', function(){
    app.locals.URLs = {
        const pool = mysql.createPool({
             host: process.env.DB_HOST_LOCAL,
             user: process.env.DB_USER_LOCAL,
             database: process.env.DB_NAME_LOCAL,
             password: process.env.DB_PASSWORD_LOCAL,
    }
});
app.configure('development', function(){
    app.locals.URLs = {
        const pool = mysql.createPool({
             host: process.env.DB_HOST_JAWS,
             user: process.env.DB_USER_JAWS,
             database: process.env.DB_NAME_JAWS,
             password: process.env.DB_PASSWORD_JAWS,
    }
});

这是正确的,我需要要求app = require('express')吗?

4

1 回答 1

0

如果你想向 express 中注入任何东西(路由器、中间件、配置、模板引擎等),那么你将需要“app”。对于本地人,您正在应用实例中创建“URLs”属性。

这没什么大不了的,但是您可以改为module.exports = pool;作为一个独立的 js 模块并使用它而不管 Express。

关于您的环境,请注意不要将生产密码泄漏到开发中,也不要将开发人员的本地配置泄漏到生产中。也就是说,您的配置不需要 if.. else 。我还发现您没有用于测试的环境配置...

在文档中,加载变量的首选方法是预加载它们。

node -r dotenv/config your_script.js

如果您喜欢.env.local .env.production .env.test方法,还可以自定义 .env 文件

node -r dotenv/config your_script.js dotenv_config_path=/custom/path/to/.env

这还允许您进行多个设置,而不必担心冲突/意外覆盖或剩余。你也可以

于 2021-12-21T20:47:16.170 回答