Петлевой узел mssql: как настроить удаленный метод для использования выходного параметра для хранимой процедуры? - PullRequest
0 голосов
/ 29 июня 2019

Я использую loopback3 api для приложения для создания новых пользователей. Мой удаленный метод '/ newUser' выполняет хранимую процедуру, но не может создать нового пользователя.

Поток приложений: создайте нового пользователя, запустив 3 хранимые процедуры: usp_CreateUser, которая возвращает UserID через @UserIdOutputParam. usp_CreatePhone и usp_CreateEmail выполняются изнутри usp_CreateUser и используют @UserIdOutputParam в качестве FK для создания связанного телефона и электронной почты.

Проблема: запуск удаленного метода 'newUser' в loopback, который выполняет usp_CreateUser, @UserIdOutputParam не может быть возвращен обратно в usp_CreateUser, и ошибки кода там / новый пользователь не создано.

Попробовал жестко закодировать UserIdOutputParam в NULL, попытался пропустить его.

Я рассмотрел примеры параметров node-mssql & tediousjs, но не вижу, как их использовать с моим удаленным методом с обратной связью.

* * Узел тысячу двадцать-один-MSSQL:
const request = new sql.Request()
request.input('input_parameter', sql.Int, value)
request.output('output_parameter', sql.Int)
request.execute('procedure_name', (err, result) => {

утомительным:

request.addOutputParameter('number', TYPES.Int);
  request.addOutputParameter('string', TYPES.VarChar);

Вот мой код

'use strict';
module.exports = function (Person) {
  var server = require('../../server/server');
  var ds = server.dataSources.MSSQL_DB;
  Person.newUser = async function (
    firstname,
    lastname,
    phonenumber,
    emailaddress,
    //    useridoutputparam,
    request
  ) {
    request = ("EXEC dbo.usp_CreateUser" +
      "@FirstName='" + firstname + "', "
      + "@LastName='" + lastname + 
      + "@PhoneNumber=" + phonenumber + ", "
      + "@EmailAddress=" + emailaddress + ", "
      + "@UserIdOutputParam=" + null

      + ";");
    ds.connector.execute(request, function (err, data) {
      console.log(request);
      if (err) {
        console.log(err);
      } else {
        console.info("data", data);
        return (err, data);
        ;
      };
    }
    );
  };
  Person.remoteMethod('newUser', {
    accepts: [
      { arg: 'firstname', type: 'string', required: false },
      { arg: 'lastname', type: 'string', required: false },
      { arg: 'phonenumber', type: 'number', required: false },
      { arg: 'emailaddress', type: 'string', required: false },
      { arg: 'useridoutputparam', type: 'string', required: false }
    ],
    http: { path: '/newUser', verb: 'post' },
    returns: { arg: 'data', type: 'string' };
  }
  );
  //more info: https://loopback.io/doc/en/lb3/Remote-methods.html
};

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

Ошибка с консоли:

EXEC dbo.usp_CreateUser @ FirstName = 'Buzz', @ LastName = 'Lightyear', @ EmailAddress = 'blightyear @ allenmatkins.com', @ PhoneNumber = 7072738888, {RequestError: Процедура или функция 'usp_CreateUser' ожидает параметр '@ UserIdOutputParam ', который не был предоставлен.

...