`
han2000lei
  • 浏览: 276740 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

Helma中关于的User的问题

阅读更多

一、使用User对象时的注册问题:
Helma中user对象的注册有两种方式,一种通过var u = new User();的方式。另一种是通过app. registerUser(username, password)的方式。但经过使用存在如下问题:

1.在使用Helma自己的数据库时,请使用app.registerUser(username,password)这种方式。Helma在插入时就是根据用户名进行的判断,如果用户名重复,它不会进行注册。如果用户名不存在,则进行注册,所以它能准确的将用户名插入到它自己的数据库中。如果使用var u = new User();的这种方式会出现一个问题,就是数据库中的用户名插入不到Helma中的数据库中(或许我还没有找到插入的方式)。我做过测试,使用这种方式时,数据库用户名全部为"User",而不是我们注册的用户名。

2.在不使用Helma的数据库时,两种方式都可以使用,但两者在使用时在原型上有一定的区别。

(1)使用var u = new User();时一定要注意User的原型的定义:
_name = 数据库中的用户字段名
password = 数据库中的密码字段名
uname = 数据库中的用户字段名     //为什么要加上这句话?我一会就解释

下面我解释一下为什么要加上这句话:先看我们注册的一段代码
var u =new User(); 
u.uname=req.data.username;//我们关注这一句,注册时不是用u._name=req.data.username;
u.password =req.data.userpwd;
u.sex = req.data.sex;   //以下的这些代码是给用户加入其它的属性,对本问题的说明没有任何作用
u.birthday = req.data.birthday;
u.email = req.data.email;
this.users.add(u);//添加用户,这句话是不可少的,这才是真正的注册的一句话(这句话是假定将User挂载到Root的users下)

现在大家大概明白了吧,原型中的uname_name指向的都是数据库中的用户字段名。因为在进行注册赋值时,用u._name=req.data.username;是不行的,它是相当于javascript中的prototype中的一个原型属性,是不能被赋值的。如果我们不指定uname(uname是自定义的一个属性名,你可以随便起名),那么数据库中的用户名的字段也会是"User",而不是我们注册时的用户名。

(2)使用app.registerUser(username,password);这种方式,原型中可以不用定义额外的一个属性也能进行正确的注册。但是注意,在使用这种方式时,user对象的挂载路径会有问题。


二、在使用app.registerUser(username,password);来注册user对象的挂载路径问题:
假如我们将user对象挂载到在Root根目录下面的users
#Root

users = collection(User)
users.accessname=USERNAME

我们想将user对象挂载到Root的users下面,挂载点为USERNAME。但是注意了,使用app.registerUser(username,password);来注册,之后就有问题了:
var u = app.getUser(req.data.username);//通过前端页面的用户名来获取一个用户对象
res.redirect(u.href()+"main");//重定向到User对象内部的main方法去

这时的路径就很可能出现问题。我们想使用的路径:
http://localhost:8080/test/users/用户名/

而它的路径却是:
http://localhost:8080/test/用户名

所以说它没有按我们的要求挂载到我们想要的目录下面,而是挂载到应用test的下面了。这是因为,app.registerUser(username,password);默认的挂载是在应用之下。要想让它正确,必须这样来做,这是常用的办法。
//User目录下的type.properties文件如下
#User

_parent=root.users  //明确指明user对象挂载的位置,这样就不是默认挂到应用下了
_name = USERNAME   
username=USERNAME   //上面指定了挂载位置,它要按照你的username属性来找到你的挂载而不是通过_name,所以这句话是必需的
password = PASSWORD
还有另一个解决办法,那就是不用USERNAME挂载,而是用ID来挂载:
#Root

users = collection(User)
users.accessname=ID
意思就是你使用ID来挂载user,而不要用“用户名字段”来挂载user。如果你在Root原型中没有accessname=ID时,它默认的就是用ID来挂载。当用ID来挂载时,Helma能按照你的意图来挂载。而不用再在User原型下设置_parent=root.users

三、在使用Helma的数据库时的问题:
如果使用Helma的数据库,我们知道User的原型为
#User

username
password

这里虽然原型为的用户名虽然用username,但在Helma程序中取值时用的并不是username,而是name,所以使用时一定要注意。下面是代码:
var uname= u.username;//这种用法是错误的
var uname=u.name;//这种用法才是正确的

如果是用自己的数据库,最好而且建议原型中也要有一个username,但访问时就是用username,而不是用name
分享到:
评论

相关推荐

    mongodb + helma 实现web快速开发

    9. **安全考虑**:在使用MongoDB和Helma开发Web应用时,要注意SQL注入、XSS攻击等安全问题。确保数据验证、输入过滤和输出编码等安全措施到位。 10. **持续集成与部署**:最后,了解如何将项目整合到持续集成/持续...

    PHP Scripting Engine Plugin for Helma-开源

    Helma是一个Web应用程序框架。 它提供了对各种脚本引擎的支持,但是Rhino JS脚本引擎插件仍然是唯一的捆绑插件。 该项目提供了一个PHP插件,允许PHP开发人员使用Helma Web应用程序

    Antville提供高性能、功能丰富的博客托管软件

    Antville 是用服务器端 JavaScript 编写的,并使用 Helma Object Publisher 开发。Antville 在后端使用关系数据库。 要运行 Antville,您需要 Helma Object Publisher 和关系数据库软件。我们用 PostgreSQL 和 MySQL...

    jala:ORF.at 的 Jala SVN 存储库的分支——现在是 antvillehelma 的一部分

    这是 Jala Javascript 库 1.2 版的 README 文件。... 要包含某个 Jala 模块,只需将以下行添加到 Helma 应用程序的源代码中(将[name]替换为所需的模块名称): app.addRepository("./modules/jala/

    antville:Weblog托管系统的皇后号–自2001年以来用服务器端JavaScript编写

    关于安特维尔Antville是一个开源项目,提供高性能,功能丰富的博客托管软件。 Antville可以托管数以万计的博客。 服务器功率是唯一的限制。 安装和使用容易。 Antville用服务器端JavaScript编写,并由Helma Object ...

    nodejs快速入门

    - **先驱者们**:早在Node.js出现之前,已有其他几种尝试将JavaScript应用到服务器端的技术,比如Aptana Jaxer(基于SpiderMonkey)、Helma(基于Rhino)。这些尝试为Node.js的发展奠定了基础。 - **早期挑战**:...

    twoday-开源

    同时,由于开源特性,如果遇到问题或有新的需求,用户和开发者都可以参与到项目的改进中,提交修复、建议或开发新的插件和功能,进一步增强Twoday的功能性和适应性。 总的来说,Twoday作为一个开源项目,不仅提供了...

    antville:更新你的克隆——这个 repo 被替换了

    关于安特维尔Antville 是一个开源项目,旨在开发高性能、功能丰富的网络博客托管软件。 它可以轻松托管多达数千个站点(网络日志的数量受安装所有者的选择和服务器能力的限制,而不是受软件限制)。 Antville 完全用...

    helvm.github.io::sun:HELVM-在HaskellEta中实现的天堂般的神秘(Vegan Metro)虚拟机

    :sun: HELVM (发音helium )是在Haskell / Eta中实现的Heavenly Esoteric Little(素食地铁)虚拟机。 HELVM有六个部分: :helicopter: (发音helicam )天生深奥的小混凝土绝对机 ‍:wrench: :wrench: ‍:sheaf...

    nodeJS.pdf

    该标签强调了文档的主题是关于Node.js的学习资料,涵盖了Node.js的核心概念和技术要点。 #### 部分内容概览: ##### 一、Node.js 的出现背景与设计理念 - **传统观念**:过去人们认为JavaScript主要用于浏览器...

    warpFX-开源

    warpFX是Flex:trade_mark:的数据抽象库,可在Flex:trade_mark:与支持某些已定义远程方法的任何AMF3兼容服务器之间提供透明数据服务。 warpFX附带了用于Helma的服务器端远程方法和AMF3实现。

Global site tag (gtag.js) - Google Analytics