迄今为止个人那个小网站已经发布到网上了,然而功能还在迭代中,真的提及来的话,如今距离1.0版本的发布,还差50%。如今记录一下以前作的一些内容,以及一些技术路线方面的改进吧:前端
首先,这是一个用于我我的统计研究和展现的网站,当前的核心是一个CMS系统,想要统计用户发布信息的关键词与情感趋势java
最初的想法是在zuiwan.org的基础上,作一个二级网站。因此在服务端技术架构上,依然沿用主站的NODE+EXPRESS的方法,服务器没有采用一直使用的MongoDB,而是换成了MySQL,也方便后期上Java或者PHP。mysql
前端架构上,也没有采用主站的VUE,而是沿用了我更加熟练的NG1.5。sql
服务端结构:express
Index->Router->Model->DAO->MySQL => HTTP型api访问流
Index->static => 静态页面访问流
Index->socket.io Handler->Model->DAO->MySQL => socket接口访问流编程
最初是没有socket.io的,当时试图直接用普通的HTTP接口来实现,可是实时性须要用计时器来轮训,后来考虑到后期扩展,直接使用了socket.io。api
model层最初被用来作黏合,接收的是req,res,而后直接在model层作了res.end()。可是后期在扩展socket的时候发现,这样会致使耦合度激增。因而改成了,接收data,cb,而后把通用的response体扔给cb的形式。服务器
在以前的设计里,我一直不知道model层该如何设计,为什么router不能直接与dao进行调度和数据交换。而后看到他们的java实体类——天了噜,为什么一个Model要对应一个dao,这岂不是更没有道理了。session
后来我真正开始本身的写法的时候,就找到了一点点思路——好比用户模块,一方面对上层接受的是路由过来的各类相关方法,一方面,并不仅是对应一个user的Dao方法,其实涉及到不少个dao,好比token、relation等等。而token这个dao,也不可能单独拿一个Model去对应。——这是个人思路。架构
这么说来,其实我是少了Controller层。感受java里Model封装了dao以后,在Controller里调用了各个Model。可是我暂时尚未找到这样的优点。因此仍是沿用本身的思路吧。
另外,在与MySQL交互的时候,我抽取了一个dao的封装,暴露了一个query方法,做为各个dao的根基,上面的dao就只须要写dao.query(str, cb)就行了。
前端:
标准的NG1.5+UI-Router,BS作了上层样式展示。只是我一直用不惯UI.BootStrap。致使我如今还在用BS苦苦支撑。
Socket对接沿用了以前的代码、service用来存储全局变量。每一个页面进入时须要调用session检查。
其余的无甚好说了。
经验教训:
1.NodeJS编程中,接口的回调参数,默认是err, data。以方便错误处理。
2.NG-repeat是支持子变量过滤的,自动的。
3.新学了express-session。
4.mysql包的链接池,不关闭,最多10个链接,多了会爆掉。