在express4中,将数据库实例存储在app.locals中或使用app.set存储它是不好的做法吗?因为我正在思考它,因为我将在整个应用程序中使用它,因此访问起来会更容易。
答案 0 :(得分:3)
它应该工作得很好,不,我不认为这是不好的做法(至少不是可怕的) - 毕竟,app.locals
是打算为您提供一个放置全球价值的安全场所。
但是,使用Express来存储这样的各种全局值会导致应用程序紧密绑定到Express。如果您决定要删除Express并将其替换为其他内容,那么您将不得不追捕并更改现在分散在整个代码中的app.local
所有引用。
如果你想避免这种情况,一个简单的模式是创建一个模块,导出你想要的值 - 这允许你将所有相关的代码保存在一个地方,并在需要时导入它。例如:
// modules/database.js
// initialize the database
const db = initializeDatabase();
// export a "getter" for the database instance
export const get = () => db;
然后,当您想要使用数据库实例时:
// index.js
// import the database "getter"
import { get } from './modules/database';
// perform a query
const rows = get().query('SELECT * FROM table');
只需在您想要使用数据库的任何地方导入modules/database
。