全栈开发技术栈---项目实践二 概述 项目已初步完成

1、简介html

通过一个月+的开发,upopen.cn我的站点重构基本完成,本文先总结总体架构及主要技术点,后续再单独详解各技术点及开发过程。java

首先重构的目的在于系统化架构、理清分离开发及服务端开发思惟、尝试使用多的技术点,为提高公司项目的全栈应用作准备。node

本次共计三个服务[小部分技术点还在提交中],总体采用先后端分离(web服务端,数据服务端),以restful API通讯mysql

站点: !<www.upopen.cn>react

git: https://github.com/xiaolulu/upopenwebpack

QQ群: 435485569nginx


系统功能git

web: web服务端github

站点前台服务,属先后端分离中的前台,负责页面渲染、与客户端及server端的数据交互,使用http协议web

server: 数据服务端

站点后台服务,属先后端分离中的后台,与web服务端及数据库的数据交互,不直接与客户端通讯,实际项目中常会用java实现

check:

属工具类服务,用于记录、验证接口功能,在先后端分离过程当中,以方便并行开发

=============================================================================

2、系统架构
系统架构

3、系统目录

docs:系统文档

log: 系统日志,独立成单独的服务

web/

check/

server/

check: 接口记录、验证系统,总体采用MVSC结构,server、web系统也采用相同结构

app.js

package.json

webpack.config.js

assets/        静态资源包

build/        react打包后文件

model/        数据层

views/        展现层

controls/    控制层

server/        业务层

lib/        工具包

config/        配置,运行前须要修改各config里的配置项

test/        测试

server: 大体同check

web: 大体同check,多了gulp

static: 静态资源文件

upload: 上传资源文件

=============================================================================

4、技术点:

罗列本系统用到的一些有表明性的技术点,后续再分别详解。

一、nginx: 做为分发服务器,域名服务分发、缓存、GZIP压缩、负载等

二、nodejs: web、server、check系统,其中server在公司项目中经常使用更成熟的语言开发,如java

三、express: web、server系统使用,是目前最常使用的nodejs框架,我也一直在使用

四、koa: check系统使用,与express的主要区别在于异步回调的同步写法的实现,以解决回调金字塔的问题,回调金字塔很早就被问到过,不过当时认为这个不是问题,自身项目一般三层回调就能够解决了,而且函数分配合理,对易读性也不会有太大影响,不过本次开发过程当中尝试使用了KOA,其对代码的易读、精简、组织上仍是有很大的提高的,建议使用,须要必定的学习成本,另外其对一些已经开发第三方插件未全面支持,如redis、request等,须要再次包装同步调用机制,固然例举的这两个已经有了co-redis、koa-request。

五、ejs: web系统使用,作页面渲染引擎,html在程序的语法上支持有限,jade成本会更高些,ejs在语法上和html一致,额外又支持数据语法。昨天和朋友讨论过这个问题,这也是不少初次接触分离的人疑问,为何不直接使用html,数据所有用ajax,首先以我遇到的项目,所有走ajax是可行的,但有些页面变量据服务端配置动态获取会更好,而且在考虑SEO的时候数据更要直接渲染

六、redis: server、web系统使用,缓存服务器,用于暂存一些状态数据,以便快速读写,如登陆成功后由server将该用户数据写入到redis,并将对应的key经过web写入页面cookie,获取用户数据时,web都会先到redis里获取该用户是否登陆。在对数据读取效率要求很高的状况下,也能够将数据库数据所有同步到redis,从redis读取,增删改操做数据库后,同步到redis.

七、mongodb: check系统数据库,用于记录接口列表,简单易用,效率较高

八、mysql: server系统数据库,区别于mongo,其在实际项目应用更普遍。

九、reactJs: check系统页面,该系统是单页面,接口记录、验证抽象成组件,使用reactjs在开发及model维护上效率较高。

十、webpack: check系统页面模块化、打包工具,配合reactJs

十一、requireJs: web系统页面模块化。

十二、log4js: web、server、check系统日志管理,服务端开发日志记录是必须的,常规的数据收发、异常错误跟踪、性能优化(如当某请求返回超过3秒就须要记录了)

1三、shouldJs、supertest、jasmine、coverage、karma: 共同组成单元测试方案

1四、gulp: web集成jshint、unglify等的自动打包工具

1五、nodemailer: server系统使用,用户注册成功后发送邮件到对方邮箱。

写了一篇文章:http://www.upopen.cn/blog/info?id=10020

1六、pm2: Nodejs进程管理器

写了一篇文章:http://www.upopen.cn/blog/info?id=10021

1七、socket.io: web系统使用,在线用户所属数据改变时推送。

1八、其它,如http协议、加密、静态化等。


5、其它

系统在开发过程当中,本着实用、多用的原则,推迟了开发周期,也尽可能详细了解、记录了各软件、插件的使用。如mongodb的链接简单来说就是

mongoose.connect( 'mongodb://' + config.host + '/' + config.db );

这也是常见demo的写法,即没有负载备份也没有验证,但实际使用时其至比项目程序的负载更重要,因此是应该写成

var options = {
  db: { native_parser: false },
  server: { poolSize: 15 },
  replset: { rs_name: 'rename' },
  user: 'username',
  pass: 'password'
}

mongoose.connect( 'mongodb://10.10.10.1:27017,10.10.10.2:27017,10.10.10.3:27017/updb', options );

对其它一些的插件也从实际使用过程当中多了一些本身的理解,后续更新,但愿会你们有所帮助

相关文章
相关标签/搜索