无法读取未定义的属性“rid”

Cannot read property "rid" of undefined

本文关键字:rid 属性 读取 未定义      更新时间:2023-09-26
[TypeError: Cannot read property 'rid' of undefined]

是我尝试在邮政路由上执行此控制器时遇到的错误。我已经和邮递员一起测试过了。

我试图console.log(result)但我没有得到定义。

我的

查询被执行,我的行入到我的表中。我已经检查过了。密码也是散列的。

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

有问题的代码 (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 Wrapper

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属性。