Nobita 一款基于koa2.0的node框架
发布在前端2018年12月13日view:247开源项目前端开发ES6Node.js
在文章任何区域双击击即可给文章添加【评注】!浮到评注点上可以查看详情。

Nobita

avatar

介绍(v0.3.7)

Nobita 是一个基于Koa而诞生的一款框架。

建议安装淘宝镜像

$ npm install -g cnpm --registry=https://registry.npm.taobao.org

快速初始化

$ cnpm install nobita-cli -g
$ nobita-cli init
$ cd 项目名
$ cnpm install

启动项目

$ npm run local  启动本地开发
$ npm run prod   启动线上命令
$ npm run stop   停止服务
$ npm run debug  调试模式

目录结构

koa
├── package.json
├── app.js         
├── nodemon.json 
├── app
|   ├── router.js 
│   |  
│   ├── router   
│   |   └── api 
│   |  
│   ├── controller 
│   |   └── api  
│   |  
│   ├── service 
│   |   
│   ├── middleware
│   |   
│   ├── logs    
│   |   
│   ├── view     
│   |   
│   └── extend        
│       ├── helper.js   
│       └── context.js 
│   
├── config              
|   ├── config.default.js
│   ├── config.prod.js
|   └── config.local.js
└── 

目录结构约定:

  • app.js 项目入口

  • app/router.js 路由入口

  • app/router/** 子路由

  • app/router/api/** 前端接口路由

  • app/controller/** 对用户的请求参数进行处理

  • app/controller/api/** 前端接口的controller

  • app/service/** 调用第三方api

  • app/middleware/*.js 中间件

  • app/extend/helper.js 工具函数

  • app/extend/context.js ctx函数扩展

  • config/config.default.js 通用配置文件

  • config/config.local.js 开发通用配置文件

  • config/config.prod.js 线上通用配置文件

  • view/** 前端目录

  • logs/** 日志文件

内置对象

  • server: 调用第三方api
  • curl: http请求
  • helper: 工具函数
  • logger: 日志打印
  • db: mongo数据库操作
  • mysql: mysql数据库操作
  • redis: redis缓存操作
  • request: 获取到当前请求的 Request
  • nunjucks: 模板引擎
  • cache: 内部缓存

日志打印(log4js)

// config.*.js
exports.logger = {
  path: './logs/', // 日志位置
  level: 'off'     // 日志打印等级 | ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < MARK < OFF
}

// 使用方式
ctx.logger.debug(data);

前端模板

模板语法基于nunjucks

// config.*.js
exports.temp = {
  ext: 'html',  // 模板后缀
  path: path.join(__dirname, '../views'),  // 模板路径
}

http请求(axios)

// 例子
await ctx.curl({
  url: 'http://localhost:8080/test',
  method: 'get',
  params: {},
});

详细文档

mongoose语法

名称 说明
$or 或关系
$nor 或关系取反
$gt 大于
$gte 大于等于
$lt 小于
$lte 小于等于
$ne 不等于
$in 在多个值范围内
$nin 不在多个值范围内
$all 匹配数组中多个值
$regex 正则,用于模糊查询
$size 匹配数组大小
$maxDistance 范围查询,距离(基于LBS)
$mod 取模运算
$near 邻域查询,查询附近的位置(基于LBS)
$exists 字段是否存在
$elemMatch 匹配内数组内的元素
$within 范围查询(基于LBS)
$box 范围查询,矩形范围(基于LBS)
$center 范围醒询,圆形范围(基于LBS)
$centerSphere 范围查询,球形范围(基于LBS)
$slice 查询字段集合中的元素(比如从第几个之后,第N到第M个元素
// config.*.js
exports.mongo = {
  url: 'mongodb://localhost:27017/数据库',
  tables: {
    database: {
      age: Number,
      name: {
        type: String,
        unique: true
      }               
    }
  }
}

// 链接多个数据库
exports.mongo = {
  clients: {
    db1: {
      url: 'mongodb://localhost:27017/db1',
      tables: {
        database: {
          age: Number,
          name: {
            type: String,
            unique: true
          }               
        }
      }
    },

    db2: {
      url: 'mongodb://localhost:27017/db2',
      tables: {
        database: {
          age: Number,
          name: {
            type: String,
            unique: true
          }               
        }
      }
    }
  }

}
// 查询数据
await ctx.db.database.find({ name: 'Nobita' }, [options]);

// 插入数据
await ctx.db.database.insert({ name: 'Nobita' });

// 插入多条数据
await ctx.db.database.insertMany([
  { name: 'Nobita' },
  { name: 'Koa' }
]);

// 修改数据
await ctx.db.database.update({ name: 'Nobita' }, { author: 'JJ' }, [options]);

// 删除数据
await ctx.db.database.remove({ name: 'Nobita' });

// 关联查询
await ctx.db.database.aggregate(data);

// 链接多数据库
// db1
await ctx.db.db1.database.find({ name: 'Nobita' });
// db2
await ctx.db.db2.database.find({ name: 'Nobita' });

find - [options]

  • limit (number): 默认为20。查询条数。
  • page (number): 默认为0。查询页码。
  • sort (object): 排序条件

update - [options]

  • safe (boolean): 默认为true。安全模式。
  • upsert (boolean): 默认为false。如果不存在则创建新记录。
  • multi (boolean): 默认为false。是否更新多个查询记录。
  • runValidators: 如果值为true,执行Validation验证。
  • setDefaultsOnInsert: 如果upsert选项为true,在新建时插入文档定义的默认值。
  • strict (boolean): 以strict模式进行更新。
  • overwrite (boolean): 默认为false。禁用update-only模式,允许覆盖记录。

详细文档

mysql

//config.*.js
exports.mysql = {
  host     : 'localhost',
  user     : 'root',
  password : 'password',
  database : 'database'
};

// 例子
await ctx.mysql.sql('SELECT * FROM table');

详细文档

session

// config.*.js
exports.session = {
  keys: [key],
  key: 'NOBITA_SESSION', //cookie key (default is koa:sess)
  maxAge: (86400000 * 7), // cookie的过期时间 maxAge in ms (default is 1 days)
  overwrite: true, //是否可以overwrite    (默认default true)
  httpOnly: true, //cookie是否只有服务器端可以访问 httpOnly or not (default true)
  signed: true, //签名默认true
  rolling: false, //在每次请求时强行设置cookie,这将重置cookie过期时间(默认:false)
  renew: false, //(boolean) renew session when session is nearly expired
}
// 使用例子
ctx.session.name = 'Nobita';

// 删除
ctx.session.name = null;

cookies

// 使用例子
ctx.cookies.set('name', 'Nobita', [options]);

// 删除
ctx.session.get('name');
  • [options]
  • maxAge 一个数字表示从 Date.now() 得到的毫秒数
  • signed cookie 签名值
  • expires cookie 过期的 Date
  • path cookie 路径, 默认是’/’
  • domain cookie 域名
  • secure 安全 cookie
  • httpOnly 服务器可访问 cookie, 默认是 true
  • overwrite 一个布尔值,表示是否覆盖以前设置的同名的 cookie (默认是 false). 如果是 true, 在同一个请求中设置相同名称的所有 Cookie(不管路径或域)是否在设置此Cookie 时从 Set-Cookie 标头中过滤掉。

redis缓存

// config.*.js
exports.redis = {
  port: 6379,          // Redis port
  host: '127.0.0.1',   // Redis host
  family: 4,           // 4 (IPv4) or 6 (IPv6)
  password: 'auth',
  db: 0
}

// 使用例子
ctx.redis.set('key', 'Nobita', [options]);

await ctx.redis.get('key');

ctx.redis.del('key');

详细文档

配置文件

> config.default.js  // 通用配置
> config.local.js    // 本地开发配置
> config.prod.js     // 线上配置

端口监听

// config.*.js
exports.listen = { 
  port: 6001,   // 端口
  callback() {  
    // 监听端口回调
  }
}

静态资源

// config.*.js
exports.static = {
  path: path.join(__dirname, '../views/static'), // 静态资源路径
  pathPrefix: '/static' // 静态资源别名
}

中间件

// config.*.js
exports.middleware = ['isLogin'], // 中间件名称

exports.isLogin: {
  match: /\/index/ // 路由匹配规则
}

xss开启

// config.*.js
exports.xss = true

进程守护(pm2)

详细文档

热部署(nodemon)

详细文档

项目地址:https://github.com/iamtang/nobita 欢迎使用~欢迎star~欢迎提issue

评论
发表评论
暂无评论
WRITTEN BY
PUBLISHED IN
前端

前端框架

我的收藏