node-mssql将不会执行提供unhandlePromiseRejectionWarning的存储过程

时间:2018-11-07 04:43:23

标签: javascript node.js express node-mssql

以下是我的server.js文件的输出。
我正在打印要传递给存储过程的查询字符串参数。

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

以下是我得到的错误:

  

(节点:8084)UnhandledPromiseRejectionWarning:未处理的承诺   拒绝(拒绝ID:1):TypeError:无法读取以下属性的“类型”   未定义

     

(节点:8084)[DEP0018] DeprecationWarning:未处理的承诺拒绝   不推荐使用。将来,未处理的承诺拒绝   将使用非零退出代码终止Node.js进程。

下面是我对存储过程的调用。我不断收到上述错误,并且未执行存储过程。我查看了以下似乎有相同问题的link,但仍然遇到相同的错误。

这是我第一次尝试使用此节点模块调用存储过程。因此,感谢您的协助。

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 :(得分:0)

抱歉,这听起来很愚蠢,但是我在您的代码中看不到您已定义请求的地方-因此,最好的答案是错误消息未定义...

答案 1 :(得分:0)

首先为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 Procedure函数

call SO_CALLED_PROCEDURE(PASS_ARGUMENT);

它将起作用。

答案 2 :(得分:0)

我发现了问题。这是我的原始代码。

n

需要更改为:

x

最终,我将尺寸作为值参数的一部分。都错了一旦正确完成操作,存储过程就会按预期执行。