如何将新用户添加到我的用户数据库对象中
How to add a new user into my userDatabase object
我有一个全局对象定义如下:
var userDatabase = {};
在我的应用程序中,我正在尝试注册新用户。 这是我的函数的样子:
function register(req, res){
var username = req.body.username;
var obj= {count: 0,
password:req.body.password};
//if user is already in the database
if(userDatabase.hasOwnProperty(username)){
res.redirect("/?error=User has already registered");
}
//store user, redirect to home page
else{
userDatabase[username] = obj;
console.log("added new user: ", username, "with properties: ", userDatabase[username]);
//redirect to homepage
res.redirect("/");
}
}
我的问题是我不相信那句话:
userDatabase[username] = obj;
实际上是将我新注册的用户添加到我的对象中,因为当我打印到我的控制台时,它说我的用户名未定义。
如何在对象中正确存储用户名? 谢谢!
编辑:我应该补充一点,我只能使用此代码注册一个用户,当我尝试注册第二个用户时,它会显示"用户已经注册"错误......这让我真的相信我的对象没有做我想让它做的事情
这是我在 if/else 语句之前和之后打印出 userDatabase[用户名] 的值时的控制台日志:
Express server listening on port 3000
before if/else: undefined
added new user: undefined with properties: { count: 0, password: 'abc' }
after if/else: { count: 0, password: 'abc' }
POST /register 302 11ms - 58b
GET / 200 226ms - 803b
GET /libs/jquery/jquery.min.js 304 5ms
GET /libs/bootstrap/css/bootstrap.min.css 304 4ms
GET /stylesheets/style.css 200 55ms - 110b
before if/else: { count: 0, password: 'abc' }
after if/else: { count: 0, password: 'abc' }
POST /register 302 2ms - 126b
GET /?error=User%20has%20already%20registered 200 27ms - 861b
GET /libs/jquery/jquery.min.js 304 2ms
GET /libs/bootstrap/css/bootstrap.min.css 304 1ms
GET /stylesheets/style.css 304 2ms
这里有一些非常错误 - 无法识别我尝试添加的新用户
编辑2:
当我尝试在同一文件的另一个函数中访问用户数据库[用户名]时,它无法验证用户数据库{}是否存储了此用户。这就是我尝试访问它的方式:
function login(req, res) {
var username = req.body.username;
var password = req.body.password;
req.session.username = username;
req.session.password = password;
loggedInUsers[username] = LoggedIn;
//when login button is pressed
if(userDatabase.hasOwnProperty(username) ){
storedPassword = userDatabase[username].password;
if (storedPassword === password){
//check for correct password
userDatabase[username].count++;
console.log("Count: ", userDatabase[username].count);
res.redirect("/users");
}
}
else{
res.redirect("/?error=Invalid username/password");
}
}
以及注册然后尝试登录后的控制台输出:
Express server listening on port 3000
before if/else: undefined
added new user: undefined with properties: { count: 0, password: 'abc' }
after if/else: { count: 0, password: 'abc' }
POST /register 302 11ms - 58b
GET / 200 232ms - 803b
GET /libs/jquery/jquery.min.js 304 6ms
GET /libs/bootstrap/css/bootstrap.min.css 304 6ms
GET /stylesheets/style.css 200 69ms - 110b
POST /login 302 2ms - 122b
GET /?error=Invalid%20username/password 302 1ms - 68b
GET /users 200 22ms - 430b
GET /libs/jquery/jquery.min.js 304 2ms
GET /libs/bootstrap/css/bootstrap.min.css 304 3ms
GET /stylesheets/style.css 304 1ms
那么,重定向在做什么? 如果重定向,则会丢失信息。 另外,请尝试
console.log("added new user: ", username, "with properties: ", JSON.stringify(userDatabase[username]));
我相信
您的用户名已存储,但不存储在对象中,而是存储在密钥本身中。下面是一个快速节点控制台测试,显示了它:
zlatko@zlatko-desktop ~/projects/node-app $ node
> var userDB = {};
undefined
> var username = 'tester';
undefined
> userDB[username] = {count: 0, password: 'myPass'};
{ count: 0, password: 'myPass' }
> userDB;
{ tester: { count: 0, password: 'myPass' } }
> userDB[username];
{ count: 0, password: 'myPass' }
> userDB.tester
{ count: 0, password: 'myPass' }
> userDB.hasOwnProperty('tester');
true
>
因此,对象实际上已保存。我想到的一件事是,要么你的数据库不像你想象的那么全局,要么它不是持久性的。是每次运行应用时还是每次运行请求时都创建它?
另外,小费。对于这种东西,我深情地建议像护照这样的东西.js。这是幸福的,为你解决了所有这些问题,并为req对象添加了一个很好的属性和方法,如req.isAuthenticated()和req.user。
相关文章:
- 我怎样才能知道用户滑动的方向
- 何时可以;我的用户脚本在Javascript中触发右键单击(上下文菜单)
- 我应该如何应用if-else条件来向具有不同用户角色的人显示不同的菜单
- 如何让iPhone用户在我的网站上观看带字幕的视频
- 我的购物应用程序不会将用户想要购买的东西相加,也不会打印总成本
- 将用户选择的数据临时存储在我的阵列中
- 在Chrome扩展中,我如何准确地检索用户'的地区/地区/国家
- 如何获取运行我的 Web 应用程序的用户的 Windows 登录用户名
- 当用户关闭浏览器选项卡时,如何使用 PHP 或 javascript 从我的站点注销用户
- 计算喜欢我的帖子facebook应用程序的用户数量
- 使用JavaScript将日期/时间添加到我的asp.net用户控件中
- 在我的html页面-web应用程序用户界面的一个选项卡中的另一个html页面中的选项卡
- 根据我的要求限制用户选中复选框
- 我的用户可以通过单击Ajax之外的按钮来访问$_SESSION的内容吗
- 当我的响应菜单打开时,我如何删除用户转到侧面的功能
- 当用户向下滚动我的网页时,如何删除chrome地址栏周围的边框
- 我需要让用户输入他的出生日期,并使用javascript检查其形式是否正确.我的代码不起作用
- 如何获取我的网站(我的服务器)用户的MAC地址
- 我正在尝试为一个网站创建一个文本框,可以将文本更改为用户希望的任何格式
- Facebook,通知用户我的应用程序更新