首页 > 解决方案 > async fn 的模块导出结果

问题描述

我正在使用标准节点mysql包并抽象出我的数据库连接。

const mysql = require('mysql');

const connection = mysql.createConnection({
    host: host,
    user: user,
    password: password,
    database: database
});

module.exports = connection;

我想使用promises并且正在尝试使用包装好的promise-mysql包。

但是,我不清楚我是否仍然可以导出我的connection对象。

const mysql = require('promise-mysql');

const connection = await mysql.createConnection({
    host: host,
    user: user,
    password: password,
    database: database
});

module.exports = connection;

我是否必须将其包裹module.exports在 IIFE 或其他东西中?

标签: javascriptmysqlnode.jspromise

解决方案


您可以将导出设置为createConnection调用返回的 Promise。另请注意,在 ES6 中,您可以使用简写的属性名称以保持简洁和可读性:

const mysql = require('promise-mysql');
module.exports = mysql.createConnection({
    host,
    user,
    password,
    database
});

然后用户可以通过调用.thenPromise 来使用它,例如:

const connectionProm = require('script.js');
connectionProm.then((connection) => {
  // do stuff with connection
});

如果您不喜欢.then在使用连接的任何地方调用,另一种方法是使用依赖注入将连接作为参数向下传递,以便连接.then只需要存在于脚本的入口点中。

// index.js
connectionProm.then((connection) => {
  // do stuff with connection
  // pass it around as needed
});

// do NOT import or call connectionProm.then anywhere else

推荐阅读