繁体   English   中英

Node.js MSSQL package 查询 function 不返回数据

[英]Node.js MSSQL package query function not returning data

我正在写我的第一个 Node.js REST API。 我使用 MS SQL 服务器作为我的数据库。 我正在使用 npm package mssql 与我的 SQL 服务器数据库一起使用。

我直接从 mssql 文档示例页面获取了下面的代码。 我只是将它包装成 function。

 function getServices() {
  sql
    .connect(config)
    .then((pool) => {
      // Query

      return pool
        .request()
        .input("SID", sql.Int, 1)
        .query(
          "select * from [dbo].[Services] where ServiceId = @SID"
        );
    })
    .then((result) => {
      //console.dir(result); //this has data.
      return result;
    })
    .catch((err) => {
      console.log(err);
      return err;
    });
    }

上面的代码工作得很好,并从我的数据库中获取数据。 当我尝试将此代码转换为可以在我的快速路线上使用的 function 时,就会出现问题,如下所示。

router.get("/", (req, res, next) => {
  const data = getServices();
  console.log("data: ", data); //this comes back as undefined
  res.status(200).json({
    message: "Handling GET request from /services router.",
  });
});

通过阅读文档和所有其他关于 stackoverflow 的帖子。 我正在使用.then() promise 机制,那么为什么我的“结果”没有回到我的快速路线上的 function 呢? 快速路由上的“数据”常量始终未定义。 我在这里想念什么?

重击规则:调用 function const data = getServices(); 意味着这个 function 不包含任何异步工作,如 async/await/.then/.catch/Promise。

一旦 function 包含其中之一,则应始终使用上述之一调用它。

所以 #1 你必须改变

router.get("/", async (req, res, next) => {
  const data = await getServices();
  console.log("data: ", data); //this comes back as undefined
  res.status(200).json({
    message: "Handling GET request from /services router.",
  });
});

然后是 function 本身

 function getServices() {
try {
  return sql
    .connect(config)
    .then((pool) => {
      // Query

      return pool
        .request()
        .input("SID", sql.Int, 1)
        .query(
          "select * from [dbo].[Services] where ServiceId = @SID"
        );
    })
    .then((result) => {
      //console.dir(result); //this has data.
      return result;
    })
} catch(ex){
return ex;
}
    }

我一直在挖掘更多 SO 帖子并找到了我的工作解决方案 更新后,工作代码发布在下面。

router.get("/", (req, res, next) => {
  getServices().then((result) => {
    res.status(200).json(result.recordset);
  });
});


function getServices() {
  return new Promise((resolve) => {
    sql
      .connect(config)
      .then((pool) => {
        // Query

        return pool
          .request()
          .input("SID", sql.Int, 1)
          .query(
            "select * from [dbo].[Services] where ServiceId = @SID"
          );
      })
      .then((result) => {
        //console.dir(result);
        resolve(result);
      })
      .catch((err) => {
        console.log(err);
        resolve(err);
      });
  });
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM