自己倒腾的第二个项目nodejs+angular
发布于 1年前 作者 guang152252326 2399 次浏览

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

23 回复

Angualr的文档超烂…
QAQ

angular用的很不熟啊,我也感觉写的一坨一坨的,求高手指教改进的办法~~

研究一下! 权限,没在angular中实现?

@guang152252326

大体看了一下,Angular的代码,惨不忍睹啊。

  1. 每个 function xxxCtrl() 控制器都太大了。
  2. jquery, ejs, angular 都在使用,结构很混乱啊。

权限?是指angular的router吗?

我对angular了解的还比较浅,这个是边做边查api写的,感觉绑定的一些ng-click写的也比较难看,求高手指点啊~

@bsspirit

谢谢指点啊~我现在基本上是每个页面都是一个function xxxCtrl() 控制器,所以弄得特别大,控制器这块是需要把里面的功能函数提取出来吗,还是将控制器怎么合理的拆分更好?

@guang152252326

全局就一个ng-app(), 通过 ng-vew()实现单页的应用,每个控件对应一个xxxCtrl()

你好像是多页的配置。

@guang152252326

你不是单页应用,所以权限是在express的session中控制。

单页应用,权限肯定也不能用ng-click控制的,又回到响应式js的思路了。

我正在尝试用OAuth2做登陆控制,估计可以实现。

@bsspirit

恩~这个项目弄得是多页的,所以没有用上路由这一部分,页面主要使用了angular一些数据的绑定。

我现在准备好好的重新重构下前端的代码,把里面的一些结构梳理一下,

谢谢高人指点哇~我学习node看了你很多文章的~再次膜拜下~

@guang152252326

客气了。我也在做金融方面系统,多学习,多交流吧!

@bsspirit

恩~我的思路还是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 比较常用的数据共享,不是不能用而是要考虑是否真的是父子关系,任何情况下都要尽量避免过大的作用域出现

大漠穷秋的博客 和出得书都不错可以看看 博客园里 破狼的博客也很好

邹业盛的学习笔记 http://zouyesheng.com/angular.html#toc34

有关angularjs 的数据建模的 http://blog.jobbole.com/54817/

我给你的解释也不完善 方法1的理解面窄了

这篇里讲了 通过服务来共享数据

非常非常感谢,我会认真的看这些资料,重新理解下angularjs,然后好好重构下前端代码~

再次膜拜啦~

@RicterZ 不是狗的产品的,文档一般很好的吧?

这个聊天支持私聊吗?

回到顶部