node-mssql не будет выполнять хранимую процедуру, давая unhandlePromiseRejectionWarning - PullRequest
0 голосов
/ 07 ноября 2018

Ниже приведен вывод из моего файла server.js.
Я распечатываю параметры строки запроса, которые передаю в хранимую процедуру.

ID : 10################_
Email : test@mail.com
Name : testname
FamilyName : testtesttest

Ниже приведена ошибка, которую я получаю:

(узел: 8084) UnhandledPromiseRejectionWarning: необработанное обещание отклонение (идентификатор отклонения: 1): TypeError: Невозможно прочитать свойство 'type' из не определен

(узел: 8084) [DEP0018] Предупреждение об устаревании: отклонение необработанного обещания устарели. В будущем обещают отклонения, которые не обрабатываются завершит процесс Node.js с ненулевым кодом выхода.

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

Это моя первая попытка вызвать хранимую процедуру с помощью этого модуля узла. Так что любая помощь приветствуется.

app.get('/addRegistration', function(req,res){
    try 
    {
        const pool5 = new sql2.ConnectionPool(config, err => 
            {
                // Stored Procedure
                pool5.request()
                .input('FBID', sql2.varchar, 250, req.query.id)
                .input('FBEmail', sql2.varchar, 250, req.query.email)
                .input('FBName', sql2.varchar, 250, req.query.memberName)
                .input('FamilyName', sql2.varchar, 250, req.query.familyName)
                .execute('sp_registerUser', (err, result) => 
                {
                    console.log("Success"); 
                }).catch(function(err) {
                    console.log(err);
                });
            })
         pool5.on('error', err => {
            console.log("Error");
         })
    } catch (err) {
    // ... error checks
        console.log("addRegistration: " + err)
    }       
});

Ответы [ 3 ]

0 голосов
/ 07 ноября 2018

Сначала создайте файл подключения для сервера sql.

import mysql from 'mysql';
import config from 'config-yml';
import logger from '../logger';

/**
 * @description Creating pool to have simultanious connection to SQL.
 */
const pool = mysql.createPool({
  connectionLimit: config.db.max_limit,
  host: config.db.host,
  user: config.db.user,
  port: config.db.port,
  password: config.db.password,
  database: config.db.name,
  debug: process.env.DB_DEBUG || false, // Set to true if you want to debug the database.
});

/**
 * @description Creates the database connection.
 */
pool.getConnection((err, connection) => {
  if (err) {
    if (err.code === 'PROTOCOL_CONNECTION_LOST') {
      logger.error('Database connection was closed.');
    }
    if (err.code === 'ER_CON_COUNT_ERROR') {
      logger.error('Database has too many connections.');
    }
    if (err.code === 'ECONNREFUSED') {
      logger.error('Database connection was refused.');
    }
  }
  if (connection) connection.release();
});

module.exports = pool;

Затем создайте функцию экспорта для выполнения кода запроса следующим образом.

import pool from '../index';

const execQuery =  async (query, fn) => {
  pool.query(query, async (err, result, fields) => { // eslint-disable-line
    try {
      console.log(result[0][0]);
      fn(result[0][0]);
      return result;
    } catch (err) {
      return err;
    }
  });
};

export default execQuery;

После этого запишите процедуру в Workbench и вызовите функцию процедуры sql

call SO_CALLED_PROCEDURE(PASS_ARGUMENT);

это будет работать.

0 голосов
/ 07 ноября 2018

Я нашел проблему. Это был мой оригинальный код.

            .input('FBID', sql2.varchar, 250, req.query.id)
            .input('FBEmail', sql2.varchar, 250, req.query.email)
            .input('FBName', sql2.varchar, 250, req.query.memberName)
            .input('FamilyName', sql2.varchar, 250, req.query.familyName)

Необходимо изменить на:

            .input('FBID', sql2.VarChar(250), req.query.id)
            .input('FBEmail', sql2.VarChar(250), req.query.email)
            .input('FBName', sql2.VarChar(250), req.query.memberName)
            .input('FamilyName', sql2.VarChar(250), req.query.familyName)

В конечном счете размер был частью параметра значения. Это было все неправильно. Как только я сделал это правильно, хранимая процедура была выполнена, как и ожидалось.

0 голосов
/ 07 ноября 2018

Извиняюсь, если это звучит мерзко, но я не вижу в вашем коде, где вы определили запрос - поэтому мой лучший ответ будет то, что он не определен, так как ошибка говорит ...

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