登陆

极彩注册机-一个根据nodejs+koa2构建的简略轻量级MVC结构

admin 2019-10-31 134人围观 ,发现0个评论


iijs

是一个根据nodejs+koa2构建的简略轻量级MVC结构,最低依靠只是koa和koa-router。

特色

本MVC结构极为轻量细巧,又自在灵敏,运用简略,功用又满足强壮,可开发简略的页面展现网站,能够开发pai接口运用,也可支撑杂乱的多运用网站。

运用

  1. 装置 npm i iijs

运用结构

├── app //运用目录 (非必需,可更改)
│ ├── Controller //控制器目录 (非必需,可更改)
│ │ └── index.js //控制器
│ ├── view //模板目录 (非必需,可更改)
│ │ └── index //index控制器模板目录 (非必需,可更改)
│ │ └── index.htm //模板
│ ├── model //模型目录 (非必需,可更改)
│ ├── logic //逻辑目录 (非必需,可更改)
│ └── **** //其他目录 (非必需,可更改)
├── app2 //运用2目录 (非必需,可更改)
├── common //公共运用目录 (非必需,可更改)
├── config //装备目录 (非必需,不行更改)
│ ├── app.js //APP装备 (非必需,不行更改)
│ ├── route.js //路由装备 (非必需,不行更改)
│ └── **** //其他装备 (非必需,可更改)
├── public //静态拜访目录 (非必需,可更改)
│ └── static //css image文件目录 (非必需,可更改)
├── node_modules //nodejs模块目录
├── server.js //运用进口文件 (必需,可更改)
└── package.json //npm package.json

运用进口

// server.js
const {ap极彩注册机-一个根据nodejs+koa2构建的简略轻量级MVC结构p} = require('iijs');
app.listen(3000, '127.0.0.1', function(err){
if(!err) console.log('http server is ready on 3000');
});

Hello world !

// app/controller/index.js
class Index {
constructor(ctx, next) {
this.ctx = ctx;
this.next = next;
}
async hello() {
this.ctx.body = `hello iijs, hello world !`;
}
}
module.exports = Index;

拜访URL:localhost/app/index/hello

输出成果:hello iijs, hello world !

假如封闭多运用形式,能够省去url中的app

// config/app.js
{
app_multi: false, //是否敞开多运用
}

URL地址变为:localhost/index/hello

装备路由文件,能够进一步简化url拜访

// config/route.js
[
{url: '/hello', path: 'index/hello', method: 'get'}
]

URL地址变为:localhost/hello

留意:多运用形式下,路由装备path参数需求加上运用姓名,即app/index/hello

控制器麦饭石

为了方便运用,能够承继体系控制器

// app/controller/index.js
const {Controller} = require('iijs');
class Index extends Controller {
async index() {
await this.fetch();
}
}
module.exports = Index;

拜访URL:localhost

留意:体系会主动定位默许运用、默许控制器、默许办法

控制器fetch办法,会主动烘托当时运用、控制器、办法对应的模板文件:

app/view/index/index.htm

也能够指定模板文件

await this.fetch('list'); // app/view/index/list.htm
await this.fetch('article/index'); // app/view/article/index.htm
await this.fetch('app2/article/index'); // app2/view/article/index.htm
await this.fetch('list.html'); // /list.html
await this.fetch('app2/article/index/list'); // /app2/article/index/list.htm

留意:当fetch参数字符串包括后缀或许目录超越3级,将主动依照运用的根目录地址获取模板文件

当fetch,第二个参数为true时,会直接回来烘托后的内容

const html = await this.fetch(null, true);

除了fetch,还有三个办法

await this.display(content); //直接内容输出
await this.load(template); //直极彩注册机-一个根据nodejs+koa2构建的简略轻量级MVC结构接文件输出
await this.render(content); //烘托内容输出

控制器模板数据赋值读取

运用assign办法赋值,data办法读取

//赋值模版数据
this.assign(name, value);
//获取模版数据,name为空时,获取一切数据
this.data(name);

在控制器中获取视图实例

this.view; //视图实例
this.view.art; //art-template模板引擎
this.view.ejs; //ejs模板引擎
this.view.md; //markdown-it实例

留意:体系控制器里的视图实例和模板引擎实例,都是按需懒加载的,能够放心运用,主张运用控制器都承继体系控制器。

运用装备文件

// config/app.js
const app = {
app_debug: true, //调试形式
app_multi: true, //是否敞开多运用
default_app: 'app', //默许运用
default_controller: 'index', //默许控制器
default_action: 'index', //默许办法
deny_apps: ['common'], //制止拜访运用
controller_folder: 'controller', //控制器目录名
view_folder: 'view', //模板目录名

view_engine: 'art', //默许模版引擎,内置(ejs, art)
view_depr: '_', //模版文件名切割符,'/'代表二级目录
view_ext: '.htm', //模版后缀
static_dir: './public', //静态文件目录,相对于运用根目录,为空或false时,封闭静态拜访
koa_body: {} //koa-body装备参数,为false时,封闭koa-body
}
module.exports = app;

路由装备文件

// config/route.js
route = [
{url: '/', path: 'app/index/index', method: 'get', type: 'controller'},
{url: '/hello', path: 'app/index/hello', method: 'all'}
];
module.exports = route;

留意:单运用形式,能够去掉path参数中的app,例如path: 'index/index',其他可参阅koa-router

method参数:'get', 'put', 'post', 'patch', 'delete', 'del'

type参数为恣意自定义的目录名,controller和view姓名能够在app.js装备文件中更改

事例:路由到运用2

// config/route.js
{url: '/hello', path: 'app2/index/hello', method: 'get'}
// 履行文件app2/controller/index.js hello办法

事例:路由到模板(到模板时,会直接读取输出)

// config/route.js
{url: '/hello', path: 'app2/index/hello', method: 'get', type: 'view'}
// 直接输出app2/view/index/hello.htm 模板内容

事例:路由到middleware

// config/route.js
{url: '/hello', path: 'app2/index/hello', method: 'get', type: 'middleware'}
// 履行文件app2/middleware/index.js hello办法

事例:路由到api

// config/route.js
{url: '/hello', path: 'app2/index/hello', method: 'post', type: 'api'}
// 履行文件app2/api/index.js hello办法

事例:路由输出hello world !

// config/route.js
{url: '/hello', path: async (ctx, next) => {
ctx.body = 'hello iijs, hello world !';
}, method: 'get'}
// 输出hello iijs, hello world !

大局参数

除了koa ctx参数外,本结构,增加4个根参数

ctx.$app //当时恳求运用名
ctx.$controller //当时恳求控制器名
ctx.$action //当时恳求办法名
ctx.$ii //运用根主动懒加载器,相对运用根目录,能够主动加载恣意的nodejs模块,假如模块是个class类,能够主动实例化,并传入ctx next参数,详细可参阅npm noader 模块

事实上运用的控制器办法履行用的便是ctx.$ii

//体系控制器办法履行
await ctx.$ii[ctx.$app][type][ctx.$controller][ctx.$action]();
//履行list控制器index办法
ctx.$ii.app.controller.list.index();
//或许
const list new ctx.$ii.app.controller.list(ctx, next);
await list.inde极彩注册机-一个根据nodejs+koa2构建的简略轻量级MVC结构x();
//获取装备文件
const cfg_app = ctx.$ii.config.app;
const cfg_db = ctx.$ii.config.db;

体系helper模块

module.exports = {
isFileSync,
isDirSync,
readFile,
ii: require('noader')
};

helper.ii为主动加载模块,能够自己实例化运用,详细用法参阅noader模块。

请关注微信公众号
微信二维码
不容错过
Powered By Z-BlogPHP