-
Notifications
You must be signed in to change notification settings - Fork 25
Home
一般来说,npm 上的库无需拷贝来放这里,除非如 node-constants 这种命名冲突的。这里只放置自己写的其它层都会用到的公用库。
配置 marked 库,因为 marked 现在版本有些不太一致,所以特地把配置放到了这里做公共处理。
提供定义常量的库,由于在 npm 注册的 constants 与 node 中冲突,所以只有把它拷贝到这里了。
邮件发送方法、邮件模板及其相应的渲染方法。
放置各种邮件模板,使用 jade 编写。
负责渲染各种邮件模板。
邮件发送逻辑。NODE_ENV=development 或配置中的 debug: true 时,只在终端打印出邮件信息;生产环境则采用 nodemailer 库来发送邮件。
提供各种类别邮件的发送方法。
使用 Mongoose 来操作数据库,这里主要包括数据模型、数据校验、数据逻辑等。
定义 Mongoose 的 Schema,不过只做简单的模式定义。模型的字段中可以包括 index、getter、setter、built-in setter,可以定义 virtual path、plugin,然后将对应的 schema 和 modelName 暴露出去。而验证、中间件、方法等放到相应的目录中去,尽量保持模型的简洁。
定义每个模型的验证器,确保文件名与模型的文件名一致。不需要验证的模型则无需定义其验证器。
定义每个 Model 的类方法,这些方法供其它层(比如 controller)调用,其它层不应该直接使用 mongoose 操作数据库,只能使用这些自定义的类方法。
定义每个 Model 的实例方法,即通过文档实例调用的。一般来说,这里面不会有太多的方法。
模型中间件,主要以 pre middleware 为主,因为只有它是带流程控制的。而 post middleware 则只是简单的事件触发而已,不带流程控制,一般用在队列这种场景。
pre middleware 里面主要做一些关联的数据操作逻辑。
放置一些会用到的 mongoose plugin,目前有 timestamp 和 pagination 两个插件,前者分别为每个模型增加 创建时间 和 更新时间 字段;后者分别为每个模型定义了分页操作的类方法。
定义 models 层要用到的常量,这些常量是真正意义上的常量,因为只可以读不可以写。
配置 xss 白名单,然后封装了对数据文档指定属性值进行 xss 过滤的门面方法,主要简化对模型每个要过滤字段都写一遍这段代码的重复工作。
自定义了 validator 的出错逻辑,因为 mongoose 的验证只需要返回 true 和 false,不需要其它值,所以需要改造下 validator 库对验证失败的处理。
这里将各个 schema 附加上 validate、method、middleware、plugin 的特性,并将其注册到 mongoose.models,然后对外暴露这些 model。
另外,还定义了一个 apiWrapper 方法,用于对 model 的类方法进行包装,将其暴露在 models.api 对象中,供其它层使用。其它层应该只调用 models.api 中各个类的方法,不应该直接调用 mongoose.model 的方法。
Express 的相关配置,路由、控制逻辑、视图等。
路由相应的控制逻辑。
目前使用到的 Express 中间件(包括路由中间件)。
定义了进行权限拦截的路由中间件。
错误处理中间件。
在请求之间传递消息的中间件。
定义了所有模板渲染需要用到的公用变量。
利用 passport 库来管理各种登录策略,其中主要是对 passport 的配置。
放置 server 层会用到的工具类等。
放置各种视图模板。
引用了 models 层提供的 api 对象,方便在 server 层使用。同时定义了 requestHandler 方法,用于将 api 直接包装后来响应请求。
其中定义了 mongodb 的连接逻辑。
路由配置。
Express 服务器的配置和启动,程序入口。
Express 的相关配置。
配置 express-fileuploader 插件,提供上传图片的请求处理。
放置一些 Grunt 的自定义任务,以及相应任务的配置。
各种任务的配置文件,文件名需与任务名相同。
对前端进行构建的 Grunt 任务。
创建项目配置文件的 Grunt 任务。
Grunt 默认任务,主要实现了命令行的提示。
运行测试的 Grunt 任务。