Подключение к базе данных Snowflake с узлом постоянно прекращается для веб-сайта - PullRequest
0 голосов
/ 29 октября 2019

Каков наилучший / правильный способ подключения к базе данных снежинок с помощью Node? т.е. где я могу разместить информацию о соединении? Разве я когда-нибудь разрушаю связь? Как избежать ошибки прерывания соединения?

Я создаю веб-сайт, используя Node для бэкенда и Snowflake для базы данных. После неизвестного периода времени, обычно после нескольких часов бездействия (то есть поздно ночью / рано утром), сайт не загружается, и все, что я получаю, это ошибка: «Невозможно выполнить операцию с использованием разорванного соединения». Единственный способ исправить это - перезапустить сервер, который немедленно исправляет ошибку. Обратите внимание, что эта ошибка возникает в том случае, если DNE подключения также не было подключено, а затем завершено.

Я пытался обратиться в службу поддержки SF, они сказали, что никогда не разъединяют / разрушают соединение (что решило первую проблему вещей, никогда не соединяющихся). Не решил проблему.

Я попытался переместить код подключения (ниже) к маршрутизатору

var snowflake = require('snowflake-sdk');

// Create a Connection object that we can use later to connect.
var connection = snowflake.createConnection( {
    account: process.env.ACCOUNT,
    username: process.env.SFUSER,
    password: process.env.SNOWFLAKEPW,
    database: process.env.SNOWFLAKEDB,
    warehouse: process.env.SNOWFLAKEWH
    }
);

connection.connect();

, однако я не мог понять, как сделать подключение глобальной переменной для передачи на маршрутизатор b / cУ меня есть файл маршрутов с несколькими запросами в последовательности. У меня есть несколько файлов маршрутов с несколькими маршрутами каждый. Мои маршрутизаторы настроены так:

const express = require('express');
const router = express.Router();
const controller= require('../snowflake/controller.js')
const controller2= require('../snowflake/controller2.js')

router.get('/submitted', controller.query1, controller.query2, controller2.query3, controller.loadView)

module.exports = router

Я также пытался переместить информацию о соединении в начало каждого из файлов контроллера, потому что соединение могло стать глобальной переменной, но я продолжаю получать ошибку прерванного соединения,

Мое единственное другое предположение - делать что-то подобное перед каждым маршрутом, но если пользователь загружает несколько страниц, это создает ту же ошибку при создании нескольких соединений?

router.get('/submitted', SFcontroller.snowflakeConnect, controller.query1, controller.query2, controller2.query3, SFcontroller.snowflakeDestroy, controller.loadView)

Документы о снежинках немногочисленны и содержат только синтаксис и ничего о лучших практиках. Хотелось бы увидеть пример рабочего кода

...