Javascript 在节点会话中将访问级别创建为函数
我正在尝试使用会话在Node.js中创建访问级别。例如,如果用户名是“test”,它可以查看某个页面。如果用户名为“admin”,则无法查看同一页面。用户名存储在MySQL表“accounts”中。该表具有列属性“username”。我一直在尝试不同的东西,但我似乎无法让它发挥作用 以下是我的JS代码:Javascript 在节点会话中将访问级别创建为函数,javascript,node.js,session,rbac,Javascript,Node.js,Session,Rbac,我正在尝试使用会话在Node.js中创建访问级别。例如,如果用户名是“test”,它可以查看某个页面。如果用户名为“admin”,则无法查看同一页面。用户名存储在MySQL表“accounts”中。该表具有列属性“username”。我一直在尝试不同的东西,但我似乎无法让它发挥作用 以下是我的JS代码: app.get('/ViewPage', function(request, response) { var connection = request.app.get('pool');
app.get('/ViewPage', function(request, response) {
var connection = request.app.get('pool');
if (request.session.loggedin) {
var username;
connection.query('SELECT username FROM accounts WHERE username = test', function (error, results, fields) {
if (username == "test") {
// do the command here
} else if (username == "admin"){
response.redirect('/');
}
});
} else {
response.redirect('/');
}
});
编辑:
我更新了我的代码如下,但它不断循环到“管理员无法查看此页面”否则如果块
app.get('/Create_Award', function (request, response) {
var connection = request.app.get('pool');
if (request.session.loggedin) {
connection.query('SELECT username FROM accounts', function (error, results, fields) {
{ account: results[0] };
if (error) {
console.log(error);
}
else {
if (results[0].username === "test") {
connection.query('SELECT accounts.id, accounts.username, awardType.id as awardTypeId, awardType.title FROM accounts JOIN awardType WHERE username = ?', [request.session.username], function(error, results, fields) {
response.render('Create_Award.html', { account: results[0], data: results });
console.log('Test account.');
}); //2nd connection
}
else if (results[0].username === "admin") {
response.redirect('/');
console.log('Admin cannot view this page.');
}
else {
response.redirect('/');
}
}
}); //1st connection
} else {
response.redirect('/');
}
});
您永远不会填充您的
var用户名
,因为它将始终是未定义的
,并且您的代码将转到else
块
app.get('/ViewPage', function (request, response) {
var connection = request.app.get('pool');
if (request.session.loggedin) {
connection.query('SELECT username FROM accounts WHERE username = test', function (error, results, fields) {
if (error) {
console.log(error);
}
else {
if (results[0].username === "test") {
response.redirect('/myCustom');
}
else if (results[0].username === "admin") {
response.redirect('/');
}
else {
response.redirect('/');
}
}
});
} else {
response.redirect('/');
}
});
更新你的代码,它就会工作
编辑-从更新后的代码中我可以看出,唯一不正确的是如何使用res.render
。看一看,它需要一个回调函数
在你的代码中试试这个,如果有效,请告诉我
response.render('Create_Award.html', { account: results[0], data: results },(err,html)=>{
res.send(html)
});
app.get(“/viewpage”),异步函数(req,res){
var connection=req.app.get(“池”);
if(res.session.loggedin){
试一试{
const result=wait connection.query(
“从username=test的帐户中选择*”
);
如果(结果[0]。用户名==“测试”){
//某物
}else if(结果[0]。用户名=“admin”){
//某物
}
}捕获(错误){
//您可以记录错误
返回res.redirect(“/”);
}
}
返回res.redirect(“/”);
});
这里有一些事情需要注意
1)使用异步/等待。它使代码更具可读性,因为查询检索数据可能需要一些时间。还将其全部封装在try/catch块中,以便在出现错误时处理错误
2)您的查询回调未被使用。您应该使用results参数以回调方式检索数据
3)根据我的意见,请务必尝试返回响应,否则您可能会收到“路由错误:发送后无法设置标题”1。“用户名”在哪里定义?2.“else if”是无法访问的。3.你在connection.queryHello中缺少了“else”,我已经像上面一样更新了我的代码,但是它一直循环回“admin”else if块。请查看编辑