😎 My blog api server powered by @nodejs
Switch branches/tags
Clone or download

README.md

NodePress

GitHub issues GitHub forks GitHub stars GitHub last commit

RESTful API server application for my blog.

所有依赖:在这里

更新记录:在这里

接口概述

  • HTTP 状态码

    • 401 未授权
    • 403 权限不足
    • 404 项目中不存在
    • 405 无此方法
    • 500 服务器挂了
    • 200 正常
  • 数据特征码

    • code:
      • 1 正常
      • 0 异常
    • message: 一般均会返回
    • debug: 一般会返回错误发生节点的 err;在code为0的时候必须返回,方便调试
    • result: 一定会返回
      • 列表数据:一般返回{ pagenation: {...}, data: {..} }
      • 具体数据,如文章,则包含直接数据如{ title: '', content: ... }

数据结构

  • 通用

    • extend 通用扩展 文章、分类、tag 表都包含 extend 字段,用于在后台管理中自定义扩展,类似于 wordpress 中的自定义字段功能,目前用来实现前台 icon 图标的 class 或者其他功能 ···
  • 各种 CRUD 重要字段

    • name:名称
    • _id:mongodb 生成的 id,一般用于后台执行 CRUD 操作
    • id:插件生成的自增数字 id,类似 mysql 中的 id,具有唯一性,用于前台获取数据
    • pid:父级ID,用于建立数据表关系,与 id 字段映射 ···
  • 数据组成的三种可能

    • 业务计算数据
    • 数据库真实存在数据
    • mongoose 支持的 virtual 虚拟数据

文件接口

  • 入口

    index.js -> 主程序入口
    
    引入配置,启动 Express 程序,启动并连接数据库,路由分发,启动服务
    
  • 配置

    app.config.js -> 主程序配置
    
    数据库、程序、第三方,一切可配置项
    
  • 核心模块

    core/np-routes.js -> 路由及请求响应相关逻辑
    
    core/np-redis.js ->  Redis/内存/存储的抽象模块
    
    core/np-mongodb.js -> 数据库连接启动
    
    core/np-constants.js -> 公共模型常量
    
    core/np-processor.js -> 超级解析器模块
    
  • 控制器

    controller/*.controller.js -> 各功能控制器
    
  • 数据模型

    model/*.model.js -> 各业务数据模型,映射 Mongoose 对应的模型方法
    
  • 辅助模块

    np-helper -> 用以辅助处理数据的模块
    
  • 扩展模块

    
    * 权限校验
    
    utils/np-auth.js -> 权限处理器
    
    权限验证方法,抽象出的对象;校验 jwt 的合理性、核对加密信息、核对时间戳
    
    
    * 网站地图
    
    utils/np-sitemap.js -> 地图生成器
    
    网站地图 xml 生成,抽象出的对象。
    包含 Tag、Article、Category 及一些死数据(页面)的集合,生成 xml 并写入本地
    
    
    * 百度实时更新服务
    
    utils/np-baidu-push.js -> 自动根据操作通知百度蜘蛛
    
    分别会在文章、分类、标签、进行 CUD 的时候调用此类
    
    
    * 垃圾评论校验
    
    utils/np-akismet.js -> 使用 akismet 过滤 spam
    
    本应该暴露三个方法:校验spam、提交spam、提交ham
    
    
    * 邮件服务
    
    utils/np-email.js -> 根据入参发送邮件
    
    程序启动时会自动校验,校验成功则根据入参发送邮件
    
    
    * 地理查询服务
    
    utils/np-ip.js -> 根据入参查询物理位置
    
    控制器内优先使用阿里云 IP 查询服务,当服务无效,使用本地 GEO 库查询
    
    
    * 搜索引擎主动提交服务
    
    utils/np-baidu-seo-push.js -> 根据入参主动提交搜索引擎收录
    
    目前只有百度
    

开发命令

npm install

# 开发模式
npm run dev

# 生产模式
npm start