我很难理解为什么我的代码无法正常工作。我正在使用节点软件包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进行设置(在路由中将完成所有操作),它将起作用。但是,如果数据库连接位于单独的文件中,则它将不起作用。
希望您能对此有所帮助
关于, 罗卡斯
答案 0 :(得分:0)
sql.connect返回一个Promise,因此一旦知道,我们就可以执行.then(result => ...或使用await,例如:
如果您想在启动时存储db对象以备以后使用,建议您更改以下行:
const db = require("../configs/databaseConnection");
到
let db = null;
require("../configs/databaseConnection").then(pool => {
db = pool;
});