gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 06:02:33 28 4
gpt4 key购买 nike

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

这是当我尝试在我的帖子路由上执行此 Controller 时收到的错误。我已经用 Postman 测试过了。

我尝试过 console.log(result) 但我未定义。

我的查询被执行,我的行被插入到我的表中。我已经查过了。密码也经过哈希处理。

问题是我没有得到任何应该返回的输出绑定(bind)。

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

Controller

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

关于javascript - 无法读取未定义的属性 "rid",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37164944/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com