无法读取未定义的 属性 "rid"

Cannot read property "rid" of undefined

[TypeError: Cannot read property 'rid' of undefined]

是我尝试在 post 路线上执行此控制器时遇到的错误。 我已经用 Postman 测试过了。

我试过 console.log(result) 但我没有定义。

我的查询得到执行,我的行被插入到我的 table。我检查过了。密码也经过哈希处理。

问题是我没有得到任何应该返回的绑定。

有问题的代码 (IMO) 是

  ...
  .then(function(result) {
    console.log(result);
    cb(null, {
      id: result.outBinds.rid[0],
      email: result.outBinds.remail[0],
      role: result.outBinds.rrole[0]
    });
  })
  ...

oracle-NodeDB 包装器

var oracledb = require('oracledb');

module.exports.OBJECT = oracledb.OBJECT;

function executeSQL(config ,sql, bindParams , options) {
  return new Promise(function(resolve, reject) {
    oracledb.getConnection(
      config,
      function(err, connection) {
        if (err) {
          return reject(err);
        }
        connection.execute(
          sql,
          bindParams,
          options,
          function(err, result) {
            if (err) {
              doRelease(connection);
              return reject(err);
            }
            resolve(result);
            doRelease(connection);
          });
      });
  });
}

function doRelease(connection) {
  connection.release(
    function(err) {
      if (err) {
        console.log(err.message);
      }
    }
  );
}

module.exports.executeSQL = executeSQL;

控制器

var database = require('../database/oracledbWrapper');
var dbconfig = require('../database/dbconfig').dbconfig;
var jwt = require('jsonwebtoken');
var bcrypt = require('bcrypt');

    exports.createUser = function(req, res, next) {
        var user = {
            email: req.body.email
        };

        var unhashedPassword = req.body.password;

        bcrypt.genSalt(10, function(err, salt) {
            if (err) {
                return next(err);
            }
            bcrypt.hash(unhashedPassword, salt, function(err, hash) {
                if (err) {
                    return next(err);
                }

                user.hashedPassword = hash;

                insertUser(user, function(err, user) {

                    var payload;

                    if (err) {
                        return next(err);
                    }

                    payload = {
                        sub: user.email,
                        role: user.role
                    };

                    res.status(200).json({
                        user: user,
                        token: jwt.sign(payload, config.jwtSecretKey, {expiresInMinutes: 60})
                    });
                });
            });
        });
    }

    function insertUser(user, cb) {

      var bindParams =  {
          email: user.email.toLowerCase(),
          password: user.hashedPassword,
          rid: {
            type: database.NUMBER,
            dir: database.BIND_OUT
          },
          remail: {
            type: database.STRING,
            dir: database.BIND_OUT
          },
          rrole: {
            type: database.STRING,
            dir: database.BIND_OUT
          }
        };

      database.executeSQL(
        dbconfig,
        'insert into express_users (email,  password, role ) values ( :email, :password,  \'BASE\' ) returning id, email, role into :rid , :remail, :rrole', 
        bindParams,
        {}
      )
      .then(function(result) {
        console.log(result);
        cb(null, {
          id: result.outBinds.rid[0],
          email: result.outBinds.remail[0],
          role: result.outBinds.rrole[0]
        });
      })
      .catch(function(err) {
        console.log(err);
        next(err);
      });
    }

路线

var RESTfulAPICon = require('../controllers/RESTfulAPI');
var indexCon = require('../controllers/index');
var views = require('express').Router();

views.route('/users').post(RESTfulAPICon.createUser);

exports.views = views;

问题出在我的包装器上,主要在这里

module.exports.OBJECT = oracledb.OBJECT;

我只导出 OBJECT 属性 ,但稍后我尝试访问 BIND_OUT 属性。而且它们不存在。

如果我像这样完全导出

module.exports.OBJECT = oracledb;

然后我可以访问 BIND_OUT 个属性。