iijs是一个基于nodejs+koa2构建的简单轻量级MVC框架,最低依赖仅仅koa和koa-router。
本MVC框架极为轻量小巧,又自由灵活,使用简单,功能又足够强大,可开发简单的页面展示网站,可以开发pai接口应用,也可支撑复杂的多应用网站。
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 {app} = require('iijs');
app.listen(3000, '127.0.0.1', function(err){
if(!err) console.log('http server is ready on 3000');
});
// 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:http://localhost/app/index/hello
输出结果:hello iijs, hello world !
如果关闭多应用模式,可以省去url中的app
// config/app.js
{
app_multi: false, //是否开启多应用
}
URL地址变为:http://localhost/index/hello
配置路由文件,可以进一步简化url访问
// config/route.js
[
{url: '/hello', path: 'index/hello', method: 'get'}
]
URL地址变为:http://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:http://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); //直接文件输出
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.index();
//获取配置文件
const cfg_app = ctx.$ii.config.app;
const cfg_db = ctx.$ii.config.db;
module.exports = {
isFileSync,
isDirSync,
readFile,
ii: require('noader')
};
helper.ii为自动加载模块,可以自己实例化使用,具体用法参考noader模块。
本文向大家介绍前端轻量级MVC框架CanJS详解,包括了前端轻量级MVC框架CanJS详解的使用技巧和注意事项,需要的朋友参考一下 选择正确的库 创建一个JS APP没有好的工具是很有难度的,jQuery只是操作DOM的库,没有提供任何创建APP的基础,这就是为什么我们要一个类似CanJS的专门的库。 CanJS 是一个轻量级的MVC库,提供你创建一个JS APP所需的工具。 CanJS 是一个轻
本文向大家介绍轻量级javascript 框架Backbone使用指南,包括了轻量级javascript 框架Backbone使用指南的使用技巧和注意事项,需要的朋友参考一下 Backbone 是一款基于模型-视图-控制器 MVC 模式的轻量级javascript 框架 ,可以用来帮助开发人员创建单页Web应用。 借助Backbone 我们可以使用REST的方式来最小化客户端和服务器间的数据传输,
本文向大家介绍超好用轻量级MVC分页控件JPager.Net,包括了超好用轻量级MVC分页控件JPager.Net的使用技巧和注意事项,需要的朋友参考一下 JPager.Net MVC好用的轻量级分页控件,好用到你无法想象,轻量到你无法想象。 JPager.Net MVC好用的轻量级分页控件,实现非常简单,使用也非常简单。 JPager.Net MVC好用的轻量级分页控件,代码精心推敲,经多
问题内容: 是否有一个提供发布/订阅模式的Java轻量级框架? 一些理想的功能 支持泛型 向发布者注册多个订阅者 API主要是接口和一些有用的实现 完全不需要内存,持久性和事务保证。 我了解JMS,但这对我来说太过分了。发布/订阅的数据是文件系统扫描的结果,扫描结果被馈送到另一个组件进行处理,然后在将其馈给另一个组件之前进行处理,依此类推。 编辑:所有在同一过程中。bean的PropertyCha
本文向大家介绍简单介绍Python的轻便web框架Bottle,包括了简单介绍Python的轻便web框架Bottle的使用技巧和注意事项,需要的朋友参考一下 基本映射 映射使用在根据不同URLs请求来产生相对应的返回内容.Bottle使用route() 修饰器来实现映射. 运行这个程序,访问http://localhost:8080/hello将会在浏览器里看到 "Hello World!".
本文向大家介绍写简单的mvc框架实例讲解,包括了写简单的mvc框架实例讲解的使用技巧和注意事项,需要的朋友参考一下 这一章先把支持注解的功能加上,这样就不需要经常地修改配置文件了。 至于视图处理的地方,就还是先用json吧,找时间再写。 项目地址在:https://github.com/hjx601496320/aMvc 。 测试代码在:https://github.com/hjx60149632