Javascript Node.js常量有问题

Javascript Node.js常量有问题,javascript,node.js,Javascript,Node.js,我目前正在学习Node.js,在将常量集成到服务中时遇到了问题。我已经创建了一个常量文件,并从其他文件中引用这些值。不幸的是,当我引用常量而不是仅仅将文本放入所有函数调用时,事情开始失败,我似乎没有正确地执行它 常数.js 尝试连接到MySQL数据库时,连接失败,因为服务器声称凭据不正确。但是,当我用文本替换下面的所有常量时,一切都正常工作(因此我没有使用错误的身份验证信息) 常量是一个内置节点模块,它提供系统级常量供其他内置模块使用,如fs、crypto等。如果需要constants.js,则

我目前正在学习Node.js,在将常量集成到服务中时遇到了问题。我已经创建了一个常量文件,并从其他文件中引用这些值。不幸的是,当我引用常量而不是仅仅将文本放入所有函数调用时,事情开始失败,我似乎没有正确地执行它

常数.js 尝试连接到MySQL数据库时,连接失败,因为服务器声称凭据不正确。但是,当我用文本替换下面的所有常量时,一切都正常工作(因此我没有使用错误的身份验证信息)


常量
是一个内置节点模块,它提供系统级常量供其他内置模块使用,如
fs
crypto
等。如果需要
constants.js
,则需要包含指向它的(绝对或相对)路径。例如:

var constants = require('./constants');
所以,有几件事:

  • 看起来您试图要求安装名为
    常量的节点模块或内置模块(对于我们来说,内置节点模块(如fs、http、crypto等)中的一组常量)。这将是您无法访问它的主要原因。节点不知道如何查找本地模块b/c未提供路径字符串

  • 通过一些可选但(有时)有用的重构,您可能能够稍微清理一下您的模块

我建议对您要求模块的方式进行以下更改:

// Bc it's a set of constants, use the es6/2015 `const` if available when requiring your module
const constants = require('./constants');
你可以用module.exports清理一下你的模块;使您能够真正清楚地了解您要公开的对象:

module.exports = {
  DB_HOST : 'localhost',
  DB_PORT : 3306,
  DB_USER : 'user',
  DB_PASSWORD : 'password',
  DB_DATABASE : 'database',
}
另一个考虑事项:在大多数应用程序中,您确实希望尽可能保持配置在内部无状态。这意味着你的应用不应该有任何硬编码的配置值。通常,如果您避免这样做,您将有一个更灵活的外部设置。换言之,您将能够使用尽可能多的不同数据库连接到尽可能多的不同实例。当您更改数据库时,您只需更改环境,而不必更改应用程序本身。而且,如果你了解了所有的语义,你的应用程序的工作是连接,而不是真正决定连接到哪里——环境应该提供这一点。因此,可以从您的模块中获得以下内容:

const config = {
  DB_HOST : process.env.DB_HOST,
  DB_PORT : process.env.DB_PORT,
  DB_USER : process.env.DB_USER,
  DB_PASSWORD : process.env.DB_PASSWORD,
  DB_DATABASE : process.env.DB_DATABASE,
};
module.exports = config;
您可以使用
process.env.YOUR_VAR
从任何地方访问它们,但是如果您想将它们整合到一个模块中,那么这个模块在许多方面都同样好,可以让您更改外部配置值变量名称(即process.env.DB_USERNAME而不是DB_USER),而不必在其他任何地方更改它(如果不需要保持名称同步)


希望有帮助!:)

除了将
require()
更改为使用本地模块而不是内置模块之外:

var constants = require('./constants');
您的代码中有一个拼写错误:

port: constants.DB_POST,
//  wrong character  ^ 
应该是:

port: constants.DB_PORT,

您的mysql正在运行吗?@Phoenix是的-正如我所说,当我用文本替换常量名称时,一切都正常工作。与下面的答案无关,我建议不要要求使用名为常量的文件。考虑命名IT数据库常量或DbCuttoSts:请注意,如果要包含本地,则总是需要这样做。files@GiveMeAllYourCats这是不正确的,尽管这是为该项目编写的源文件的最佳实践。安装的任何模块都不需要绝对或相对路径,如果您在require配置中设置了别名,则不需要任何其他路径。非常感谢!非常有用。
port: constants.DB_POST,
//  wrong character  ^ 
port: constants.DB_PORT,