edge.js - невозможно запустить параметризованный запрос, где параметр имеет нулевое значение

Я пытаюсь записать данные в SQL Server из приложения Node.js, используя edge.js. Данные данные имеют определенную степень изменчивости, так что определенные свойства часто не определены. Это необязательные значения, которые представлены как таковые в базе данных, например referrer (nvarchar(255), null),

При обработке данных я сопоставляю их с заранее определенным классом модели и явно устанавливаю undefined свойства к null, Это гарантирует, что присутствуют все параметры, необходимые для запроса. Тем не менее, когда я запускаю запрос, в файле edge.js сообщается, что параметр не указан. Если я изменю null Значение должно быть пустой строкой, это работает, но это явно не желательно. Пример кода...

var edge = require('edge');

// entity to save
var Visit = function Visit(obj) {
  obj = obj || {};

  this.eventtype = 'Visit';
  this.visitguid = obj.visitguid;
  this.url = obj.url || null;
  this.useragent = obj.useragent || null;
  this.referrer = obj.referrer || null;
  this.created = obj.created || null;

  return this;
}

var insertVisit = edge.func('sql', function () {/*
  INSERT INTO Visits (guid, url, useragent, referrer, created)
  VALUES
    (@visitguid
    ,@url
    ,@useragent
    ,@referrer
    ,CONVERT(DATETIME, @created, 103))
*/});

var visit = new Visit({
  visitguid: 'f47ac10b-58cc-4372-a567-0e02b2c3d479',
  url: 'www.a-website.com/page/',
  useragent: 'Googlebot',
  created: '13/06/2014 12:41.000'
});

insertVisit(visit, function (err, result) { /* callback code here */ });

Выдается ошибка

error: System.AggregateException: One or more errors occurred. --->
System.Data.SqlClient.SqlException: The parameterized query '(@eventtype nvarchar(28),@visitguid nvarchar(36),@url nvarchar(3' expects the parameter '@referrer', which was not supplied.

Я предполагаю, что это проблема / ограничение в файле edge.js. Например, в C# вы бы установить null параметр для DBNull.Value скорее, чем null прямо, но нет никакого очевидного или документированного способа достичь этого в JavaScript. Есть ли способ сделать эту работу?

(Конечно, я мог бы использовать Edge для записи некоторого кода C# для записи в БД, но это будет немного сложнее, поэтому я бы предпочел сделать это, как описано выше, если это возможно.)

Любые советы будут оценены. Спасибо

1 ответ

Решение

Это теперь исправлено в edge-sql v0.1.2 (который также добавляет поддержку для вызова хранимых процедур в дополнение к базовым операциям CRUD).

Другие вопросы по тегам