Nodejs, GraphQl и SQLServer возвращают нулевые значения - PullRequest
0 голосов
/ 31 января 2020

Я пытаюсь подключить веб-службу Node.js и express к моей базе данных SQLServer.

Я проверял, и они возвращают правильные значения в базу данных, но проблема заключается в том, когда Я пытаюсь получить информацию из Graphql и преобразовать ее в JSON

. JSON возвращает мне структуру, которая мне нужна, но со всеми данными с нулевым значением.

Это это конфигурация базы данных:

const sql = require('mssql');

const config = {
user: 'user',
password: 'password',
server: 'server',
database: 'db',
options: {
  encrypt: true
}
};

Это метод, который вызывается Graphql:

let getEmpleado = (id) => {
let datos = sql.connect(config, function(err){
   if (err) console.log(err);   

   let sqlQuery = 'SELECT Empleado, Nombre, Apellido1, Apellido2 FROM dbo.Empleados WHERE Empleado=' + id.id;
   let sqlRequest = new sql.Request();   

//console.log(sqlQuery);

    let datos1 = sqlRequest.query(sqlQuery, function(err, empleado){
        let datos2;
        if (err) console.log(err)
        datos = JSON.stringify(empleado.recordset[0]);
        sql.close();  
        console.log(datos);
    //return datos2; 
   });
   //return datos1;
  });
 return datos;
}

Результат:

{
"data": {
  "empleado": {
  "Empleado": null,
  "Nombre": null,
  "Apellido1": null,
  "Apellido2": null
  }
 }
}

Я совсем новичок в это и мне нужна помощь, потому что я схожу с ума в поисках информации.

Edit 1:

После отладки функции я увидел, что она выполняется в порядке, который не логичен для меня.

Я помещаю код снова с номером, указывающим шаги, которые он делает.

let getEmpleado = (id) => {
 1- let datos = sql.connect(config, function(err){
   3- if (err) console.log(err);   

   4- let sqlQuery = 'SELECT Empleado, Nombre, Apellido1, Apellido2 FROM dbo.Empleados WHERE Empleado=' + id.id;
   5- let sqlRequest = new sql.Request();   

//console.log(sqlQuery);

    6- let datos1 = sqlRequest.query(sqlQuery, function(err, empleado){
        8- let datos2;
        9- if (err) console.log(err)
        10- datos = JSON.stringify(empleado.recordset[0]);
        11- sql.close();  
        12- console.log(datos);
    13- //return datos2; 
   });
   7- //return datos1;
  });
 2- return datos;
}

Редактировать 2:

Как Дэниел Сугестед, я проверяю документацию MS sql и использую обещание Queries Exam ple: Пример запросов Promises .

После отладки снова какой-то странный порядок выполнения функций.

1- const sql = require('mssql')

2- sql.on('error', err => {
  // ... error handler
})

3- sql.connect(config).then(pool => {
// Query

6- return pool.request()
    .input('input_parameter', sql.Int, id.id)
    .query('SELECT Empleado, Nombre, Apellido1, Apellido2 FROM dbo.Empleados WHERE Empleado= @input_parameter')
4- }).then(result => {
    7- console.dir(result)
    8- return result.recordset[0]
}).catch(err => {
    // ... error checks
});

5- console.log('End')

1 Ответ

0 голосов
/ 31 января 2020

Нет необходимости использовать stringify. Ваш распознаватель должен возвратить простой Объект со свойствами, которые соответствуют полям возвращаемого типа. Другими словами, должно быть достаточно вернуть empleado.recordset[0].

Каждый распознаватель получает значение, в котором родительское поле разрешено в качестве первого параметра. Если вы не предоставляете распознаватель клиентов, поведение по умолчанию в GraphQL. js состоит в том, чтобы попытаться вернуть свойство родительского значения с тем же именем, что и у поля. Другими словами, поведение разрешения по умолчанию для поля Nombre должно возвращать parent.Nombre. Если преобразователь родительского поля возвращает { Nombre: 'Fernando' }, тогда поле Nombre будет преобразовано в "Fernando". Если распознаватель родительского поля возвращает строку, Nombre преобразуется в null, поскольку строки не имеют свойства с именем Nombre.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...