request.on('row', function(columns) {}) никогда не вызывался

Я подключаюсь к базе данных Azure SQL с помощью NodeJS с Tedious. Мне удается подключиться, INSERT и SELECT. Однако я не могу получить значение столбца, когда вставляю строку в таблицу «пользователь».

Код здесь:

function insertUser(Name, res) {
    request = new Request("INSERT [user] (name, ticket) VALUES (@Name, @Ticket);", function(err) {
        if (err) {
            res.json({ Error: err });
        }
    });
    request.addParameter('Name', TYPES.NVarChar, Name);
    request.addParameter('Ticket', TYPES.Int,10);
    var result = {};
    request.on('row', function(columns) {
        columns.forEach(function(column) {
          if (column.value === null) {
            console.log('NULL');
          } else {
              result[column.metadata.colName] = column.value;
          }
        });
      res.json(result);
    }); 

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

И я вызываю функцию:

router.post('/register', function(req, res){
  console.log(req.body); // for logging
  if (req.body.name) {
    insertUser(req.body.name, res);
  }
});

Запрос из терминала на Mac

curl -H "Accept: application/json" -H "Content-type: application/json" -X POST -d '{"name":"XXXX"}'  http://localhost:3000/users/register

После этого данные добавились, но res.json(result); не был вызван. Я получил это сообщение: «завиток: (52) Пустой ответ с сервера».

Я хочу получить «user_id» вставленного пользователя. Знаете ли вы какие-либо решения?


person Mitsuhiko Shimomura    schedule 27.02.2016    source источник


Ответы (1)


Решение этой проблемы находится здесь: https://github.com/pekim/tedious/issues/117

Добавьте select @@identity в конец запроса. Как это:

'INSERT [user] (name, ticket) VALUES (@Name, @Ticket); select @@identity'

После этого я могу получить данные ответа!

person Mitsuhiko Shimomura    schedule 28.02.2016