节点JS mssql导出数据库连接

时间:2019-10-30 12:28:09

标签: javascript node.js sql-server

我很难理解为什么我的代码无法正常工作。我正在使用节点软件包mssql,并希望在单独的文件中具有数据库池连接启动功能:

databaseConnection.js:

const sql = require("mssql/msnodesqlv8");

config = {
  database: process.env.DB_NAME,
  server: process.env.DB_SERVER,
  driver: "msnodesqlv8",
  options: {
    trustedConnection: true
  }
};

let pool = sql.connect(config);

module.exports = pool;

然后我有我的快速路线文件data.js

const express = require("express");
const router = express.Router();
const db = require("../configs/databaseConnection");

router.get("/dataList", async (req, res) => {
  let allData = await db.request().query("select * from dataList");
  console.log(allData);
  res.render("dataList", { title: "Data list" });
});

module.exports = router;

但是,当我启动服务器并转到路由时,出现错误:

(node:13760) UnhandledPromiseRejectionWarning: TypeError: db.request is not a function

问题是,如果我正是按照示例mssql documentation进行设置(在路由中将完成所有操作),它将起作用。但是,如果数据库连接位于单独的文件中,则它将不起作用。

希望您能对此有所帮助

关于, 罗卡斯

1 个答案:

答案 0 :(得分:0)

sql.connect返回一个Promise,因此一旦知道,我们就可以执行.then(result => ...或使用await,例如:

如果您想在启动时存储db对象以备以后使用,建议您更改以下行:

const db = require("../configs/databaseConnection");

let db = null; 
require("../configs/databaseConnection").then(pool => {
    db = pool;
});