pool.request不是一个函数

时间:2019-05-20 14:42:12

标签: node.js sql-server

我想使用mssql模块设置准备好的语句。我为所有与用户相关的请求创建了一个查询文件。

:nth-of-type()

这种方法允许我需要此查询文件并通过执行所需的查询来访问数据库

const db = require('../databaseManager.js');

module.exports = {
  getUserByName: async username => db(async pool => await pool.request()
    .input('username', dataTypes.VarChar, username)
    .query(`SELECT
              *
            FROM
              person
            WHERE
              username = @username;`))
};

我的数据库管理器处理数据库连接并执行查询

const userQueries = require('../database/queries/users.js');

const userQueryResult = await userQueries.getUserByName(username); // call this somewhere in an async function

运行代码时,出现以下错误

  

UnhandledPromiseRejectionWarning:TypeError:pool.request不是   功能

有人知道代码有什么问题吗?

我认为发生这种情况是因为尚未初始化池...但是我使用async / await来处理此问题...

1 个答案:

答案 0 :(得分:3)

这是我使您的代码工作的方式(我做了一些大幅度的简化):

const sql = require("mssql");
const { TYPES } = require("mssql");
const CONN = "";

(async () => {

  const pool = new sql.ConnectionPool(CONN);
  const poolConnect = pool.connect();
  const getUserByName = async username => {
    await poolConnect;
    try {
      const result = await pool.request()
.input("username", TYPES.VarChar, username)
.query(`SELECT
              *
            FROM
              person
            WHERE
              username = @username;`);
      return {
        result: result.recordset,
        err: null
      };
    } catch (err) {
      return {
        result: null,
        err
      };
    }
  };

  console.log(await getUserByName("Timur"));
})();

简而言之,请先阅读this

当您看到PR是在您的问题之前两个月才创建的,但仍未反映在here中时,您可能会微笑。

基本上,而不是:

const pool = new sql.ConnectionPool(config).connect();

您这样做:

const pool = new sql.ConnectionPool(config);
const poolConnection = pool.connect();

//later, when you need the connection you make the Promise resolve
await poolConnection;