基于Koa2+mongoDB的后端博客框架

Posted yogurtq

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于Koa2+mongoDB的后端博客框架相关的知识,希望对你有一定的参考价值。

主要框架:koa2全家桶+mongoose+pm2。

在阅读前建议将项目克隆到本地配合食用,否则将看得云里雾里。
项目地址:https://github.com/YogurtQ/koa-server
如有错误,欢迎指正。如有疑问,欢迎交流。

在此强烈推荐还在用express的同学转到koa2,koa2本就是express原班人马打造,熟悉express的话上手很快,而且es6/es7语法真的越用越爽。如果是新手的话,直接学习koa2就对了。

一、安装

node.js v7.6.0+
npm v3.x+
须安装pm2

全局安装pm2
npm i -g pm2

安装依赖
npm i

启动development
npm run dev

启动production
npm run build

启动test
npm run test

二、项目结构

├─.gitignore                // 忽略文件配置
├─app.js                    // 应用入口
├─config.js                 // 公共配置文件
├─ecosystem.config.js       // pm2配置文件
├─package.json              // 依赖文件配置
├─README.md                 // README文档
├─routes                    // 路由
|   ├─private.js                // 校验接口
|   ├─public.js                 // 公开接口
|   └view.js                    // 页面接口
├─models                    // 模型
|   ├─index.js                  // 配置
|   └user.js                    // schema
├─controllers               // 操作业务逻辑
|      ├─index.js               // 配置
|      ├─login.js               // 登录
|      └test.js                 // 测试
├─services                  // 业务
|      ├─index.js               // 配置
|      └user.js                 // 用户
├─middlewares               // 中间件
|      ├─cors.js                // 跨域中间件
|      ├─jwt.js                 // jwt中间件
|      ├─logger.js              // 日志打印中间件
|      └response.js             // 响应及异常处理中间件
├─logs                      // 日志目录
├─lib                       // 依赖库
|  ├─error.js                   // 异常处理
|  ├─baseDAO.js                 // 基础业务类
|  └mongoDB.js                  // mongoDB配置
├─bin                       // 启动目录
|  ├─.sh/.bat                   // 启动和停止批处理文件
|  └www                         // 启动文件配置

三、项目说明

1.routes 路由

  • public 无需校验,可直接访问
  • private 需登录,身份验证通过后可访问
  • view 前端页面路由,非必须

2.views 页面

  • 页面目录,首页默认为index.html,可在routes/view中修改,如需使用模板引擎可自行安装
  • 现在的一贯做法是,前后端分离,将前端文件放入代理服务器中。如将vue项目打包后的dist文件丢进nginx中,但为了保证该框架的完整性,还是保留了views目录

3.services 业务

  • index.js 的作用为自动扫描注册当前文件夹下的业务类,但不会扫描子文件下的js文件,因此通常业务都直接放在services文件夹下,如有特殊情况,则新建子文件夹并自行处理,如该框架下的fileService目录
  • service都采用了类的写法,因此需node版本支持,并且都继承自lib目录下的baseDAO类,baseDAO中是一些基础方法,由此可避免重复编写find/delete等方法,如有其它需要,则可在service中自行扩展
  • service中导出的类名需与js文件名一致

4.models 模型

  • index.js 文件同services,如有特殊需要,新建子文件夹并自行处理
  • model实质上为mongoose的schema,按照mongoose的方法来定义字段类型,验证规则等

5.controllers 控制器

  • index.js 文件同services,如有特殊需要,新建子文件夹并自行处理
  • controller中为路由对应的方法,由于需操作数据库且koa2采用了async/await,因此该目录下方法都是async方法,编写时需注意异步的问题。
  • controller.js中方法的编写格式为:“‘METHOD url‘: async function()”, 即:“‘请求类型 请求地址‘:处理方法”,method需大写,接口api统一以‘/api‘开头

6.pm2

  • pm2主要用来守护应用,有兴趣可自行学习
  • pm2并非koa项目必须,但由于在package.json的scripts中使用了pm2命令,因此需先安装,或者自行修改scripts

7.其他

  • 其他目录说明见项目结构章节,不作过多解释
  • 配置文件见config.js

以上是关于基于Koa2+mongoDB的后端博客框架的主要内容,如果未能解决你的问题,请参考以下文章

快速搭建可用于实战的koa2+mongodb框架

Vue + Node + Mongodb 开发一个完整博客流程

Vue+Vant+Koa2+MongoDB 实现用户登陆

前后端分离全栈开发项目师徒开启,VUE+koa+MongoDB!

Koa2+MongoDB+JWT实战--Restful API最佳实践

基于Node.JS, MongoDB的开源IM聊天框架Spika