Ошибка запроса: для этого запроса не указано соединение; при подключении к серверу Sql с помощью express.js?

Я использую последние версии модуля node, express и mssql. Я пытаюсь подключиться к локальному экземпляру SQL Server 2014 с помощью express.js.

Я использую модуль mssql и механизм обратных вызовов из официальной документации.

Я пытался:

const express= require('express');
const app= express();
const mssql= require('mssql');

app.get('/', (req, res) => 
{
  const configuration=
  {
    name: "default",
    host: 'localhost',
    database: 'HimHer',
    user: '',
    password: '',
    port: 1433
  }

        new mssql.connect(configuration, error => 
        {
            new mssql.Request().query('Select * from Users', (err, dataset) => 
            {   
                  if(err)
                  {
                      console.log(err);
                      res.send(err);  
                      return;
                  }
                  else
                  {
                      console.dir(dataset);  
                      res.send(JSON.stringify(dataset));  
                      return;           
                  }


         });
    });

    mssql.close();


    mssql.on('error', err => 
    {
        console.log(err);  
    });
});



app.listen(5000, () => 
{
    console.log('Listening to requests on port 5000');
})

Я хочу, чтобы он был подключен к базе данных.


person CodingManiac    schedule 12.02.2019    source источник


Ответы (3)


Я думаю, вы закрываете соединение до того, как оно создано. Переместите команду закрытия соединения рядом с строками res.send(...). Затем он пытается подключиться, ждет соединения, после этого запускает выбор, ждет результата, и после получения результата отправляет ответ клиенту и закрывает соединение.

См. этот пример:

let x = setTimeout(function(){
    console.log('async function called');
}, 1000);
clearTimeout(x);

И посмотрите это:

let x = setTimeout(function(){
    console.log('async function called');
    clearTimeout(x);
}, 1000);

Второй код будет логироваться, а первый нет.

person sarkiroka    schedule 06.09.2019

sql.Request.query() требует определенного имени БД.

Вам нужно указать базу данных, в которой вы хотите запросить вызов Request.query().

добавьте use HimHer; перед оператором выбора.

  new mssql.connect(configuration, error => 
    {
        new mssql.Request().query('use HimHer; Select * from Users', (err, dataset) => 
        {   
              if(err)
              {
                  console.log(err);
                  res.send(err);  
                  return;
              }
              else
              {
                  console.dir(dataset);  
                  res.send(JSON.stringify(dataset));  
                  return;           
              }


     });
});
person Feiga Lubow    schedule 01.09.2020

Как новый разработчик javascript, я уже могу сказать вам, что вы должны написать

const app = express.Router();

вместо

const app = express(); 

когда вы хотите использовать такие методы, как получение, отправка, удаление и т. д. Вы должны указать своему приложению, каким путем следовать в зависимости от ситуации. Я уже пробовал без express.Router(), и мои приложения каждый раз вылетали. Но я не знаю, решит ли это твою проблему, и я извиняюсь, если сказал что-то плохое/неправильно, я все еще учу английский ^^.

person Raed    schedule 29.07.2019