在Node.js中管理会话变量的最佳方法是什么?有图书馆吗?
1> donald..:
您可以使用以下方法轻松完成:
连接:http://senchalabs.github.com/connect/
Connects就像Ruby中的Rack.它为您提供了一个额外的层,您可以在其中"玩"身份验证,会话,cookie等.
其他选择是使用框架:
Express.js:http://expressjs.com/
它似乎是最常用的node.js框架.就像Sinatra for Ruby并且运行在连接之上.
Geddy:http://geddyjs.org/
如果您想要做更复杂的WebApp,Geddy就是您选择的.就像Rails for Ruby.
我认为你应该提到Express是建立在Connect之上的 - 任何与Connect兼容的功能或插件都可以与Express配合使用.
2> z5h..:
nodejs提供了一个基本的http API.http是无状态的,会话和会话变量的思想存在于构建于http之上的框架/协议中.http://en.wikipedia.org/wiki/Session_%28computer_science%29
请查看http://geddyjs.org/或http://expressjs.com/作为使用提供会话的节点构建的Web框架的示例.
3> WeNeedAnswer..:
只需将其卸载到memcache或其他一些缓存机制.我不会用这种东西给你的服务器增加负担.超级精益网络服务器必须记住东西的重点是什么.
我也会尝试将您的网站开发为应用程序而不是网站,或将您的网站视为应用程序,使用html5的精彩功能,例如本地存储/本地数据库,并减少服务器和客户端计算机之间的流量.
如果所有其他方法都失败了(或者网站很小)那么什么阻止你编写自己的会话类.没那么难.特别是如果它是一个内存类型的东西.放一些计时器逻辑来超时会话,然后你去.该死的动态语言如JavaScript,应该是一个很好的.
结构应该是一个字典,其中键是会话,值是包含最后通信和功能的详细信息的对象(以允许访问某些功能).添加扫描功能以清除已超时的旧会话.和宾果游戏.基本会话服务.基本检查"是列表中的会话密钥...是/否...获取详细信息"......我认为这就是......或者是否有一些我缺少的功能.
我个人会尽可能避免使用任何第三方工具.时间之沙非常快,您可以始终依赖自己开发的代码.
根据我的经验,每次添加新的第三方工具时,您都会将自己绑定到第三方,以实现您开发的产品的预期寿命.这是不好的,当前面的黑匣子出现问题(它总是这样)时,缺乏控制和理解某人的黑色盒装好代码的想法是很难处理的.您会发现许多免责声明附加到第三方许可协议中,"我自己冒险使用"是我经常看到的.时间之沙确实发生了快速变化,只是因为有人说代码是1.0并不意味着杰克不再.
你的论点中有太多漏洞,我甚至不知道从哪里开始.1)为什么要使用第三方工具:节省时间和精力.2)开源!=没有品牌.Express/Connect由团队制作,他们的工作经过大型社区的审查.他们不是"有点孩子".3)重新发明轮子需要时间.也许你的时间是免费的,大多数人不是.4)你永远不会知道每个螺丝,螺栓和夹子.所有现代软件都建立在框架之上,任何一个人都知道每一点都太过分了.老实说,我不相信你可以成为这些意见的专业开发人员.
如果您可以自己编写代码并最重要的是理解代码,并且可以在合理的时间内开发代码,为什么要使用第三方工具?而且我相信我写的所有代码远远超过第三方.我是一名工程师而不是艺术家,我建立的代码有时会破坏但永远不会崩溃.没有经过测试的代码没有任何借口.有了集成测试,单元测试,回归测试等工具,你会用什么借口说你的代码还没有经过测试?对你的才能更有信心.你和任何第三方一样好.
框架不是"银子弹".当您针对框架进行编程时,您允许其他人为您控制有关代码的重大决策.你肯定能看到吗?如果框架过于笼统,那么一旦做出这些重大决策就非常难以追溯,那么它将为您做出所有重大决策.使用框架也会混淆实际的编程.定义您对Framework的解释,有多种类型的Framework.有些框架是如此集成到编程语言中,我称之为编程系统.
我从未亲自侮辱过你,我说你的论点有漏洞,然后我把它们排成一行.你!=你的论点.当我说我老实说不相信你可以成为一个有这些意见的专业开发者时,我的意思是一般的"你",而不是你的具体.您对框架的看法忽略了所有现代软件都使用它们的事实.我支持我的立场,这不会发生在任何地方.我同意接受的答案,使用Express/Connect是正确的方法.因此我对Express的辩护.
这些日子的编程比"在课堂上使用最好"要复杂得多,有更多的政治因素可以撼动.当一个像NodeJS这样的新工具出现时,每个人和我的意思是每个人都在追求成为x,y,z选择的事实框架.这就是我早期的意思.保持你的粉末干燥,不要对任何事情忠诚,直到平衡的平衡出现并最终获胜者出来.一定要使用这些框架,但要确保如果需要,可以减少癌症并重新开始,保持代码完好无损
你似乎正在超越我的"框架是必要的"的立场,并认为"框架是坏的".请理解,我不同意您对框架的任何问题,但它们仍然是必要的.没有使用SOME框架,没有人开发软件.用100%自行开发的代码构建现代软件根本不可能.
4> 小智..:
唐纳德的答案很好 - 一旦你进入连接中间件的洋葱模式,你必须决定使用什么类型的会话存储.express中的默认值是MemoryStore,不适合生产使用.以下是您的一些选择:
Mongo https://github.com/mikkel/express-session-mongo - 一定要使用'native_parser:false'选项
Redis https://github.com/visionmedia/connect-redis - 非常好,但如果您还没有将redis用于pub/sub或存储,那么它可能并不理想.
注意,还有其他选择 - 这取决于您的项目.寻找可以利用现有技术堆栈引入的内容.
这很有意思,那么如果不通过维护会话,你将如何管理用户权限?
我想专注于"Express中的默认值是MemorySrote,而不是用于生产用途".请访问http://engineering.linkedin.com/nodejs/blazing-fast-nodejs-10-performance-tips-linkedin-mobile并阅读第7点.