基于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的后端博客框架的更多相关文章
- Angular4+Koa2+MongoDB开发个人博客
**文章原创于公众号:程序猿周先森.本平台不定时更新,喜欢我的文章,欢迎关注我的微信公众号.** 
阅读本篇前,请先配置好相应的环境,请仔细阅读教程 基于 Hexo 从零开始搭建个人博客(一). 原文链接:基于 Hexo 从零开始搭建个人博客(二) 前言 博客搭建过程遇到任何问题,优先在本页面搜索, ...
- 基于 Hexo 从零开始搭建个人博客(五)
阅读本篇前,请先阅读前几篇文章: 基于 Hexo 从零开始搭建个人博客(一) 基于 Hexo 从零开始搭建个人博客(二) 基于 Hexo 从零开始搭建个人博客(三) 基于 Hexo 从零开始搭建个人博 ...
随机推荐
- 使用Volley获取验证码
时间紧张,直接上代码 public class MainActivity extends AppCompatActivity { private RequestQueue queues ; Strin ...
- H5页面 用户启动无痕浏览本地储存 localstorage 清楚数据
移动端开发时,如果用户浏览器启用了无痕浏览,那么本地存储信息就会失效,会导致页面信息报错 解决办法: 先判断是否能适用 localStorage.setItem 如果不行在适用 cookie coo ...
- 给大家分享一下java数据库操作步骤
获取驱动程序Jar文件,并放置到项目的类路径中: 注册驱动器类: 获取数据库连接: 获取Statement对象来执行相关SQL操作: 关闭各种资源;
- Python期中考试程序设计题详解-2
一.请使用turtle库的turtle.pencolor().turtle.seth().turtle.fd()等函数,绘制一个边长为200的红色等边三角形. 题目解析: (1)本题利用turtle画 ...
- Scala-Mongodb入门之CRUD
Scala入门之Mongo增删改查 环境jdk1.8,scala2.13 使用sbt管理依赖,在build.sbt中添加依赖: libraryDependencies += "org.mon ...
- python进程间共享数值、字典、列表变量
##python进程间共享数值.字典.列表变量 关注公众号"轻松学编程"了解更多. import multiprocessing def worker(num, mgr_dict, ...
- Union-Find算法详解
今天讲讲 Union-Find 算法,也就是常说的并查集算法,主要是解决图论中「动态连通性」问题的.名词很高端,其实特别好理解,等会解释,另外这个算法的应用都非常有趣. 说起这个 Union-Find ...
- VUE自定义(有限)库存日历插件
开发过程中遇到一个令人发指的,一个element-ui无法满足的日历需求, 改造其日历插件的代价太大,于是索性自己手写一个,需求如下: 1. 根据开始.结束时间计算时间覆盖的月份,渲染有限的可选择日期 ...
- 获取tp3.2 public所在的路径
//返回服务器真实路径 $Absolute_Path=$_SERVER['SCRIPT_FILENAME']; //截取index.php $Absolute_Path=substr($Absolut ...
- maven profile filter 线上线下分开打包配置
maven自动选择不同的配置文件打包profile+filter 1. profile: [要点:] activeByDefault默认激活,不用再mvn命令时指定额外参数: [注意:] 使用非默认的 ...