github项目地址:
https://github.com/tangguangyao/stock
PS: 前端和后端代码中都有很多的不足,感谢几位高手的评论和指导,angularjs有很多不足的地方,需要重构。
功能:
1 股票页面聊天室功能: a. 聊天室以股票为单位,同一个用户可以进入多个股票的聊天室进行聊天 b. 聊天记录可以设置缓存数量,默认为20条,如果超过20条会存储到数据库中,当聊天室中没有用户也会将聊天内容存入数据库中
2 聊天室代码: https://github.com/tangguangyao/stock/blob/master/models/socket.js
3 微博类似的话题,评论,回复,转发功能,前端使用angularjs绑定实现
4 页面实时交互,包括关注股票,关注用户功能
5 股票页面能查看讨论这个股票的话题
6 个人页面能查看我关注的用户的话题,关注股票的相关话题,我的话题,@我的话题
7 加入grunt管理代码,引入uglify压缩代码,jshint检测代码规范,watch监听代码变化
8 使用mocha检测后端代码 检测代码在test中 总结mocha单元测试经验
http://hi.baidu.com/tang_guangyao/item/302a9d1a9976c06ae65e0643
9 加入async流程控制,对于需要多次回调查询数据库的进行重构
10 尝试bigpige,首页利用bigpipe,加载热门股票和热门用户,并且和angular结合使用
11 使用外网免费数据库https://app.mongohq.com
12 跨域请求的雪球网具体股票数据
更新说明:因为股票具体数据是跨域请求的雪球网接口,雪球接口的参数会定时改变,所以对接口参数处理了一下,放入views的top.ejs文件中。
目前还在持续维护,添加新的npm插件,实现新功能
安装方法:
安装依赖
npm install
启动程序
node app.js
Angualr的文档超烂…
angular用的很不熟啊,我也感觉写的一坨一坨的,求高手指教改进的办法~~
研究一下! 权限,没在angular中实现?
大体看了一下,Angular的代码,惨不忍睹啊。
- 每个 function xxxCtrl() 控制器都太大了。
- jquery, ejs, angular 都在使用,结构很混乱啊。
权限?是指angular的router吗?
我对angular了解的还比较浅,这个是边做边查api写的,感觉绑定的一些ng-click写的也比较难看,求高手指点啊~
谢谢指点啊~我现在基本上是每个页面都是一个function xxxCtrl() 控制器,所以弄得特别大,控制器这块是需要把里面的功能函数提取出来吗,还是将控制器怎么合理的拆分更好?
你不是单页应用,所以权限是在express的session中控制。
单页应用,权限肯定也不能用ng-click控制的,又回到响应式js的思路了。
我正在尝试用OAuth2做登陆控制,估计可以实现。
恩~这个项目弄得是多页的,所以没有用上路由这一部分,页面主要使用了angular一些数据的绑定。
我现在准备好好的重新重构下前端的代码,把里面的一些结构梳理一下,
谢谢高人指点哇~我学习node看了你很多文章的~再次膜拜下~
客气了。我也在做金融方面系统,多学习,多交流吧!
恩~我的思路还是jquery的那种套路,对angular运用还只停留在数据绑定上~
angularjs 通过route切换模板 后台的ejs其实可以不用了 前台和后台仅进行数据交换 简单的权限控制用angularjs控制 登录的用户权限可以写到rootScope里
DOM的变化和控制用指令控制 控制器尽量小范围,不要一个模板若干功能就一个控制器
ui 可以使用angularui-bootstrap
推荐大漠穷秋的《 Think in AngularJS:对比jQuery和AngularJS的不同思维模式》
恩~非常感谢中肯的建议,正在考虑重构前端,准备作为单页面形式,用router控制。
控制器这块有些疑惑想请教下:
我之前考虑把控制器范围扩大的原因是,页面上不同地方的数据模块都能很好的互相处理
如果控制器范围小了,例如A控制器中模块需要B控制器中的数据,两个控制器数据就比较难处理,如果我把控制器范围增大,就可以在这大范围内,随意处理数据了
所以我就把控制器扩大到整个页面上了~
求教高手指导
@guang152252326 算不上高手也就是最近在学习这个
你的问题是作用域之间的数据共享吧
有几种方法: 1.通过创建服务来共享数据; 2.通过作用域上的事件进行交互; 事件交互不能向所有的监听作用域之间进行传播,只能在父子作用域之间进行。 Angularjs在scope中提供了冒泡和隧道机制,$broadcast会把事件广播给所有子controller,而$emit则会将事件冒泡传递给父controller,$on则是angularjs的事件注册函数 3.通过cookie方式记录状态 4.angularjs的作用域有继承性,子作用域可以访问父作用域的数据(这个应该是你使用的)
方法1 一般用来从同后台获取数据
方法2 通过消息的方式将不同控制器进行解耦
比如 a控制器数据变化影响到 b控制器里的数据或者其他控制器里的数据,那么可以定义一个fatherctr
emit broadcast
a --------------> father ctr -------------> b or c or d
方法4 比较常用的数据共享,不是不能用而是要考虑是否真的是父子关系,任何情况下都要尽量避免过大的作用域出现
大漠穷秋的博客 和出得书都不错可以看看 博客园里 破狼的博客也很好
非常非常感谢,我会认真的看这些资料,重新理解下angularjs,然后好好重构下前端代码~
再次膜拜啦~
@RicterZ 不是狗的产品的,文档一般很好的吧?
这个聊天支持私聊吗?