这次玩大了, nodeclub被我抄袭了
客观请留步, 今天做了回标题党~哈哈, 项目源码请点击查看源码, 这是koa处女座, 只为提供交流学习, 欢迎star, fork和拍砖~
why NC-EXAMPLE
动手实践该项目的初衷是为了对koa
及es6相关知识进行一个实践性学习, 以期达到对利用koa
开发项目的全貌有一个初步的认识, 总体来说该项目主要参照nodeclub包括一些样式以及项目结构来实现, 个人认为已经经过实践的项目总是有很多可学习的地方(^.^).
实践结果
该项目源代码可查看github, NC-EXAMPLE源代码, 该项目的目的只是为了实践使用koa去开发一个完整的项目, 开发的功能点并不是很多, 主要功能点界面效果截图如下:
- 首页
- 主题详情
- 主题发表
- 主题回复
- 用户登录
- 用户注册
实践思考
该项目实践过程中主要问题以及不足如下:
mongoose
同步查询的问题, 主要采用Promise
方法解决.- 模型的问题, 该实践项目的模型设计的非常简单, 并没有考虑模型之间的关联关系等复杂逻辑.
- 数据输出到模板的问题, 主要是统一将数据封装在一个
data
对象中, 渲染模板时统一将data
作为参数传入模板. - 用户状态问题, 起初是在每个接口的地方来对用户对
session
状态进行认证的, 后来发现太繁琐, 因此简单写了个名为user_sess.js
的中间件统一处理当前登录用户的状态问题, 这里有一点需要注意该项目主要用于实践, 对于
koa-session`组件一般都是需要自己去实践其编码解码函数的, 因为其对cookie中的数据加解密是公开的, 所以为了安全性考虑最好自己实现加解密函数. - 错误处理问题, 该项目的错误处理主要使用自己编写的
error.js
文件去统一处理, 存在诸多不足如错误码处理不全, 异常情况考虑过于简单等. - 最重要的问题, 该项目的界面只在chrome高版本浏览器中测试过(楼主不准备为兼容性问题牺牲生命了~), 只能说可用, 并没有考虑浏览器兼容适应性等问题.
关于该项目
整个项目主要基于koa框架以及一些es6的相关特性实现, 主要使用的技术点如下:
- requirejs客户端
- mongoose数据存储
- koa-ejs页面渲染
- koa-router处理路由
- koa-session控制用户登录
- koa-send控制静态文件访问
- koa-compress启用gzip压缩
- koa-request-log记录请求日志
- koa-less使用less编译样式文件
- koa-etag/koa-conditional-get添加缓存功能
相关产出
在实践该项目时主要的产出为浅谈EJS模板解析, 写出来的只有这篇文章了. 另外实践过程中对gzip
、cookie/session
及其相关源码koa-compress/koa-session
等也进行了相关知识研读, 总体来说收获还是不少的, 与此同时还有很多的知识点需要慢慢花时间去进一步学习并进行更深入的了解如mongodb、etag、requirejs
等.
原文链接: NC-EXAMPLE