Node.js и Microsoft SQL Server

Есть ли способ заставить мое приложение Node.js взаимодействовать с Microsoft SQL? Я не видел никаких драйверов MS SQL там в дикой природе?

Я собираю очень простое приложение, и мне нужно иметь возможность взаимодействовать с существующей базой данных MS SQL (иначе я бы пошел с mongoDB или Redis)


person Khuram Malik    schedule 01.03.2011    source источник
comment
аналогично этому вопросу сервер из узла js"> stackoverflow.com/questions/4728385/   -  person John Boker    schedule 01.03.2011
comment
Я выполнил поиск node.js SQL Server и вариантов этой строки, но не нашел ответов.   -  person Khuram Malik    schedule 01.03.2011
comment
Вы можете попробовать Prisma в качестве ORM :)   -  person nburk    schedule 02.11.2020


Ответы (15)


Мы только что выпустили предварительные версии драйверов для Node.JS для подключения к SQL Server. Вы можете найти их здесь: http://blogs.msdn.com/b/sqlphp/archive/2012/06/08/introduction-the-microsoft-driver-for-node-js-for-sql-server.aspx

person kop48    schedule 07.06.2012
comment
Это Windows только на данный момент. Я предполагаю, что большинство людей, использующих SQL Server или Azure, в любом случае являются пользователями Windows, но есть немало тех, кто просто глубоко погрузился в мир SQL Server. Ниже упоминается пользователь кросс-платформенного ODBC для тех, кто может захотеть сохранить вариант Linux в будущем. И MS...tisk tisk...поддерживающий кроссплатформенный узел, а потом этот хлам. - person Eric Twilegar; 03.09.2012
comment
Просто отметим, что драйверы MS на данный момент довольно незрелые, и что драйвер Tedious, похоже, работает лучше (кросс-платформенный). - person Tracker1; 26.10.2012
comment
Я бы никому не советовал использовать эти драйверы в их текущем состоянии. - person Christian Westman; 16.12.2013

Первоначальный вопрос устарел и теперь использует node-mssql, как ответил @Patrik Šimek, который обертывает Tedious, как ответил @Tracker1, - лучший способ.

драйвер Windows/Azure node-sqlserver, как указано в принятом ответе, требует установки сумасшедшего списка из предварительных условий: Visual C++ 2010, собственный клиент SQL Server 11.0, python 2.7.x и, возможно, также Windows 7 SDK для 64-разрядной версии на вашем сервере. Если вы спросите меня, вы не хотите устанавливать все эти гигабайты программного обеспечения на свой Windows Server.

Вы действительно хотите использовать Tedious. Но также используйте node-mssql, чтобы обернуть его и сделать много кода Полегче.

Обновление за август 2014 г.

  • Оба модуля все еще активно поддерживаются. Вопросы решаются достаточно быстро и оперативно.
  • Оба модуля поддерживают SQL Server 2000–2014.
  • Потоковая передача поддерживается, начиная с версии node-mssql 1.0.1.

Обновление 2.x, февраль 2015 г. (стабильная версия, npm)

  • Обновлен до последней версии Tedious 1.10.
  • Обещания
  • Запрос передачи в поток объектов
  • Подробные ошибки SQL
  • Обработка прерывания транзакции
  • Интегрированные проверки типов
  • CLI
  • Мелкие исправления

Это просто Утомительно:

var Connection = require('tedious').Connection;
var Request = require('tedious').Request;

var config = {
  server: '192.168.1.212',
  userName: 'test',
  password: 'test'
};

var connection = new Connection(config);

connection.on('connect', function(err) {
    executeStatement();
  }
);

function executeStatement() {
  request = new Request("select 42, 'hello world'", function(err, rowCount) {
    if (err) {
      console.log(err);
    } else {
      console.log(rowCount + ' rows');
    }

    connection.close();
  });

  request.on('row', function(columns) {
    columns.forEach(function(column) {
      if (column.value === null) {
        console.log('NULL');
      } else {
        console.log(column.value);
      }
    });
  });

  request.on('done', function(rowCount, more) {
    console.log(rowCount + ' rows returned');
  });

  // In SQL Server 2000 you may need: connection.execSqlBatch(request);
  connection.execSql(request);
}

Вот node-mssql, который имеет зависимость Tedious. Использовать это!

var sql     = require('mssql');

var config = {
  server: '192.168.1.212',
  user:     'test',
  password: 'test'
};

sql.connect(config, function(err) {
    var request = new sql.Request();
    request.query("select 42, 'hello world'", function(err, recordset) {
        console.log(recordset);
    });
});
person Christiaan Westerbeek    schedule 26.03.2014
comment
Спасибо за ваш полезный ответ. Похоже, авторы стремились к точной номенклатуре, назвав свой пакет Tedious. На момент написания этой публикации MSNodeSQL на github не трогался около 8 месяцев, тогда как это решение последний раз обновлялось 20 дней назад. На данный момент это единственный регулярно обновляемый драйвер Node.js MS SQL. - person Conor; 31.03.2014

Недавно было выпущено несколько новых клиентов SQL-сервера node.js. Я написал один под названием node-tds, а другой называется скучно

person Chad Retz    schedule 06.01.2012
comment
Спасибо за ответ. Ваш клиент никак не зависит от .net, верно? Это как-то связано с проектом tds Орена Мазора? - person Khuram Malik; 06.01.2012
comment
Мой клиент на 100% нативный JS (на самом деле CoffeeScript), как и Tedious. Это никоим образом не связано с проектом Орена Мазора, и если бы я лучше придумал названия библиотек, я бы придумал что-то лучшее и менее двусмысленное. - person Chad Retz; 09.01.2012
comment
@Chad Retz - Похоже, это может быть решением для проекта, над которым я работаю. В настоящее время существует точка входа в .Net через JavaScript, которая делает вызов базы данных и возвращает JavaScript. Это устранит этот более медленный средний шаг. Однако как насчет пула соединений, и будете ли вы писать поддержку TVP для SQL Server 2008? - person ElHaix; 02.03.2012

Вы можете использовать node-tds.js:

Увлекательная реализация протокола TDS для node.js, обеспечивающая связь с сервером sql...

ИСПОЛЬЗОВАНИЕ:

var mssql = require('./mssql');
var sqlserver = new mssql.mssql();
sqlserver.connect({'Server':__IP__,'Port':'1433','Database':'','User Id':'','Password':''});
var result = sqlserver.execute("SELECT * FROM wherever;");
person John Boker    schedule 01.03.2011
comment
Потрясающий. Я не видел этого раньше. Большое спасибо. - person Khuram Malik; 01.03.2011
comment
Описание проекта теперь выглядит так: *EXPERIMENTAL and currently ABANDONED* - person Factor Mystic; 05.10.2011
comment
Этот альтернативный проект github может быть полезен, пока MS не добавит официальную поддержку. github.com/vivina/node-mssql - person booyaa; 02.12.2011

(дублируя мой ответ из другого вопроса).

Я бы порекомендовал node-mssql, который является хорошей оболочкой для других соединителей, по умолчанию используется мой предыдущий выбор (Tedious), что делает интерфейс немного приятнее. Это реализация JavaScript, не требующая компиляции, что означает, что вы можете работать как в Windows, так и в других средах.

Другой вариант, если вы не возражаете против использования .Net или Mono с бинарным мостом, — использовать edge .js. Что может быть очень удобно, если вы хотите использовать библиотеки .Net в node.js.

node-tds заброшен, node-odbc не работает с Windows, а MS node-sqlserver, похоже, не работает на устройствах, отличных от Windows (и имеет некоторые дурацкие требования).

person Tracker1    schedule 04.12.2012

Вы можете использовать еще один модуль — node-mssql. Он использует другие модули TDS в качестве драйверов и предлагает простой в использовании унифицированный интерфейс. Он также добавляет дополнительные функции и исправления ошибок.

Дополнительные функции:

  • Унифицированный интерфейс для нескольких драйверов MSSQL
  • Пул соединений с транзакциями и подготовленными операторами
  • Параметризованные хранимые процедуры для всех драйверов
  • Сериализация типов CLR Geography и Geometry
  • Умный тип данных JS для сопоставления типов данных SQL
  • Поддержка как промисов, так и стандартных обратных вызовов
person Patrik Šimek    schedule 12.12.2013

TSQLFTW — T-SQL для ПОБЕДЫ (Dows) — Фоско Маротто https://github.com/gfosco/tsqlftw

Это решение для управляемого кода C# и ADO .NET с оболочкой C++, которую Node.js может импортировать и с которой можно работать.


Если вы знаете .NET, вы можете попробовать службы данных WCF (службы данных ADO.NET); написать приложение WCF для доступа к данным и использовать odata (REST на стероидах) для взаимодействия с базой данных.


Если вы занимаетесь SOA и используете SQL Server 2005, вы можете проверить собственные веб-службы XML для Microsoft SQL Server 2005.

http://msdn.microsoft.com/en-us/library/ms345123(v=sql.90).aspx

Вы можете получить доступ к SQL Server как к веб-службе (HTTP, SOAP)

person Jeno Laszlo    schedule 06.01.2012

Microsoft (команда Windows Azure) только что выпустила драйвер узла для SQL SERVER.

Насколько я знаю, у него нет пакета для npm yert, но он с открытым исходным кодом. И принимающий вклад сообщества тоже.

https://github.com/WindowsAzure/node-sqlserver

Вводный пост в блоге здесь:

http://blogs.msdn.com/b/sqlphp/archive/2012/06/08/introduction-the-microsoft-driver-for-node-js-for-sql-server.aspx

person silverfighter    schedule 08.06.2012

Если вы работаете на .NET, посмотрите на entityspaces.js, мы создаем целую универсальную ORM для Node.js, для которой не потребуется служба WCF JSON... https://github.com/EntitySpaces/entityspaces.js

Если вы используете серверную технологию MSFT, вы можете использовать ее сейчас, однако мы создаем универсальную ORM Node.js и скоро получим дополнительную информацию об этом.

person Mike Griffin    schedule 25.01.2012

Есть обновление от Microsoft. Вот серия сообщений в блоге (часть 1 и часть 2).

person user1467882    schedule 20.06.2012

Я бы посоветовал взглянуть на Prisma. Мы только что (октябрь 2020 г.) объявили предварительную поддержку SQL-сервер.

Prisma — это ORM, в котором упор делается на безопасность типов и опыт разработчиков. В отличие от традиционных ORM, которые обычно сопоставляют таблицы с классами, Prisma сопоставляет запросы с типами (в TypeScript) и возвращает простые объекты из запросов.

Чтобы начать работу с Prisma и SQL Server, ознакомьтесь с этим примером и начать с нуля в документации.

person Daniel    schedule 02.11.2020

Драйверы Node.js SQL Server кажутся очень незрелыми — существует мешанина из разных проектов с разными зависимостями, производительностью и уровнями завершенности, ни один из которых не внушает доверия.

Я бы предложил использовать edge-sql . Это использует зрелую экосистему драйверов базы данных .NET и зависит только от .NET (это несложно, если вы используете Node в Windows — если нет, Mono, но я этого не пробовал).

Вот пример узла (server.js) с использованием edge-sql (обратите внимание, что вам нужно поместить строку подключения в переменную среды в соответствии с документами edge-sql):

var edge = require('edge');

// edge-sql has built in support for T-SQL / MSSQL Server
var getData = edge.func('sql', function () {/*
    select top 10 * from sometable
*/
});

getData(null, function (error, result) {
    if (error) throw error;
    console.log(result);
});

Вы также можете использовать Edge.js с .NET для доступа к другим базам данных, таким как Oracle. Я привел пример такого подхода здесь.

person saille    schedule 08.10.2015

Состояние на май 2016 года следующее.

Официальный драйвер Microsoft SQL для Node, называемый node-sqlserver, не обновлялся в течение ряда годы.

Существует новая вилка, называемая node-sqlserver-v8, которая работает с версиями Node 0.12. .Икс. и >= 4.1.х. Этот форк также имеет предварительно скомпилированные двоичные файлы для целей x64 и x86.

Пакет доступен в NPM как msnodesqlv8.

Я рекомендую этот пакет, потому что он легкий (не имеет зависимостей) и единственный, который работает со всеми последними версиями SQL Server, включая SQL LocalDB.

person Noel Abrahams    schedule 25.05.2016

Теперь (2016 г.) вы можете использовать Sequelize ORM, который поддерживает:

  • MySQL/MariaDB,
  • PostgreSQL
  • SQLite
  • Microsoft SQL-сервер

Он широко используется в соответствии с звездами Github.

person Supersharp    schedule 29.06.2016

эта ссылка описывает только решение sql 2000, а не sql 2005 или sql 2008, а также этот код позволяет отправлять только текст sql и не позволяет выполнять хранимые процедуры.

Реальным решением было бы установить узел JS на сервер Linux или на виртуальный сервер Linux на компьютере с Windows, а затем перейти на веб-сайт Microsoft и загрузить драйверы JDBC java и установить эти драйверы Microsoft ms sql java jdbc либо на Linux-сервер или виртуальный Linux-сервер.

person barry    schedule 11.08.2011
comment
Мне не очень удобно работать с linux, поэтому я стараюсь как можно меньше системного администратора. Выполнение настройки JDBC звучит запутанно, и если есть драйвер узла, доступный в виде модуля, это сделает жизнь намного проще. Вы правы, что отсутствие поддержки хранимых процедур не очень хорошо. - person Khuram Malik; 01.09.2011
comment
Но эти драйверы только для Java. Как бы вы использовали JDBC в NodeJS? - person Alba Mendez; 31.05.2012
comment
Не проверял, но есть node-jdbc. - person Beau; 11.07.2013