Узел JS mssql, экспортирующий соединение с базой данных - PullRequest
0 голосов
/ 30 октября 2019

Мне трудно понять, почему мой код не работает. Я использую пакет узлов 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 (где бы все было сделано на маршруте) все работает. Однако, если соединение с базой данных находится в отдельном файле, оно не работает.

Буду признателен за любую помощь в понимании этого

С уважением, Рокас

1 Ответ

0 голосов
/ 30 октября 2019

sql.connect возвращает обещание, поэтому, как только мы это узнаем, мы можем сделать .then (result => ... или использовать await, например:

Если вы хотите сохранить базу данныхпри запуске объекта позже я бы предложил изменить строку:

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

на

let db = null; 
require("../configs/databaseConnection").then(pool => {
    db = pool;
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...