基于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 从零开始搭建个人博 ...
随机推荐
- Layui treeSelect 回写与对应选中
今天遇到个问题就是Layui treeSelect 的回写与特定选中,网络上居然没啥资料,有的也是不全的,于是花了点时间处理好了,这里写一下,方便以后有遇到的朋友借鉴. 一.父页面 二.Form编辑框 ...
- 关于oracle监听程序的相关问题及解决方法
1.查看监听程序是否启动 打开cmd窗口,cmd用管理员运行,否则无法执行启动与停止监听命令 lsnrctl status查看运行状态 lsnrctl stop停止监听 lsnrctl start启动 ...
- 权值线段树&&可持久化线段树&&主席树
权值线段树 顾名思义,就是以权值为下标建立的线段树. 现在让我们来考虑考虑上面那句话的产生的三个小问题: 1. 如果说权值作为下标了,那这颗线段树里存什么呢? ----- 这颗线段树中, 记录每个值出 ...
- [P2114] [NOI2014]起床困难综合症 (位运算)
题面 传送门:https://www.luogu.org/problemnew/show/P2114 Solution 一道很有意思的位运算题. 要做这一题,我们首先得了解一个很重要的特点 位运算过程 ...
- Linux的进程、线程、文件描述符是什么
说到进程,恐怕面试中最常见的问题就是线程和进程的关系了,那么先说一下答案:在 Linux 系统中,进程和线程几乎没有区别. Linux 中的进程就是一个数据结构,看明白就可以理解文件描述符.重定向.管 ...
- 关于Java中泛型、反射和注解的扫盲篇
泛型 泛型概念 泛型是在JDK1.5之后引入的,旨在让我们写出更加通用化,更加灵活的代码.通用化的手段在于让数据类型变得参数化,定义泛型时,对应的数据类型是不确定的,泛型方法被调用时,会指定具体类 ...
- linux磁盘已满,查看那个目录文件最占磁盘空间并解决没有内存不耗费资源删除
df -Th查看磁盘空间占用情况 [root@IntelRC-Nginx-N023 ~]# df -Th Filesystem Type Size Used Avail Use% Mounted on ...
- leetcode133:3sum-closest
题目描述 给出含有n个整数的数组s,找出s中和加起来的和最接近给定的目标值的三个整数.返回这三个整数的和.你可以假设每个输入都只有唯一解. 例如,给定的整数 S = {-1 2 1 -4}, 目标值 ...
- Flink基础:实时处理管道与ETL
往期推荐: Flink基础:入门介绍 Flink基础:DataStream API Flink深入浅出:资源管理 Flink深入浅出:部署模式 Flink深入浅出:内存模型 Flink深入浅出:J ...
- 快速了解阿里微服务热门开源分布式事务框架——Seata
一.Seata 概述 Seata 是 Simple Extensible Autonomous Transaction Architecture 的简写,由 feascar 改名而来. Seata 是 ...