1.0.4 • Published 8 years ago

nrest v1.0.4

Weekly downloads
6
License
ISC
Repository
-
Last release
8 years ago

简介

NRest 是一个基于Node.js的简易的Restful框架,主要完成了API路由配置与Request和Response对象扩展,更多功能正在开发当中。NRest的初衷是为单页面web应用或者其他平台应用提供统一HTTP服务接口的框架,其理想的应用场景为前后端全分离,因此可以看到这个框架没有对静态资源(HTML,CSS,JS)请求的支持。推荐将静态资源托管给更专业的服务或技术去做,NRest处理业务逻辑。

NRest 是一个同步的框架,所有的处理都应在规定时间内被完成。

NRest 是代码逻辑的一种组织形式,实际上并没有为开发者提供多少便利。

NRest 的所有核心逻辑都围绕Request与Response两个对象。

理念

运行时不变的数据都应在配置里。 对象功能的扩展来源于工厂而不是继承。

install

npm 安装

npm nrest --save

源码安装

git clone https://git.oschina.net/zmp0/NRest.git

快速入门

var rest = require('nrest');
rest.conf = {   //配置 NRest 框架大多数的功能配置都写在该配置里
    prot:80,    //监听端口
    rest:{      //restful 接口
        '/logic:':{
            GET: {
                hello: helloHandle //业务逻辑函数 请求地址:/logic:hello
            }
        }
    }
};

function helloHandle(request,response){
    response.end("hello");
}

rest.listen();
    

配置多个rest接口

var rest = require('nrest');
rest.conf = {   //配置 NRest 框架大多数的功能配置都写在该配置里
    prot:80,    //监听端口
    rest:{      //restful 接口
        '/logic:':{
            GET: {
                hello: helloHandle //业务逻辑函数 请求地址:/logic:hello
            },
            POST:{
                goods:goodsHandle  //业务逻辑函数 请求地址 /logic:goods 仅处理post响应
            }
        },
        '/user:':{
            GET:{
                loginOut:loginOutHandle //业务逻辑函数 请求地址 /user:loginOut
            },
            POST:{
                login:loginHandle //业务逻辑函数 请求地址 /user:login 仅处理post响应
            }
        }
    }
};

//业务逻辑
function helloHandle(request,response){
    response.end("hello");
}

function loginHandle(request,response){
    //TODO
}

function goodsHandle(request,response){
    //TODO
}

function loginOutHandle(request,response){
    //TODO
}

rest.listen();
    

所有的业务逻辑都是一个RFunction,其原型如下,第一个参数代表request,第二个参数代表response,支持node.js原生对象的所有属性与方法,新增session与cookies相关方法

function handle(request,response){};

static字段中的KVObject.key 为请求的资源,将与request.url.pathname 做对比,相同则读取KVObject.value中对应的静态文件作为相应返回。

Cookies支持

所有的业务逻辑中的Request添加了cookies属性,为response对象新增setCookie方法

conf字段属性

  • port: 监听端口 Number
  • rest: restful接口 KVObject(Value=KVObject)
  • extends: 扩展接口

KVObject为一个键值表对象,如下

var kvobj = {
    key0:'value0',
    key1:'value1',
    key2:'value2',
    keyn:'valuen'
};

所有的业务逻辑都是一个RFunction,其原型如下,第一个参数代表request,第二个参数代表response,支持node.js原生对象的所有属性与方法,新增session与cookies相关方法

function handle(request,response){};

static字段中的KVObject.key 为请求的资源,将与request.url.pathname 做对比,相同则读取KVObject.value中对应的静态文件作为相应返回。

扩展

NRest框架允许通过添加conf.extends字段来实现部分扩展功能

var rest = require('nrest');
rest.conf = {   //配置 NRest 框架大多数的功能配置都写在该配置里
    prot:80,    //监听端口
    rest:{      //restful 接口
        '/logic:':{
            GET: {
                hello: helloHandle //业务逻辑函数 请求地址:/logic:hello
            }
            _init_:function(request,response){return true};     //分组访问预处理 可以没有 返回true则继续具体的业务逻辑,返回false则直接返回不处理业务。 可作为权限或安全性验证
        }
    },
	extends:{
		afterAllRequest: function (request, response) {}, //所有请求处理之后
        beforeAllRequest: 'function', //所有请求处理之前
	}
};

function helloHandle(request,response){
    response.end("hello");
}

rest.listen();

Cookies使用

你可以在业务逻辑中这样使用Cookies

function helloHandle(request,response){
    response.setCookie("name","zmp");   //write cookies
    request.cookies.name;       //read cookies
}

Session使用

所有的业务逻辑中为request对象新增session属性,你可以这样使用

function helloHandle(request,response){
    request.session['name'] = 'zmp';   //write session
    request.session['name'];       //read session
}

推荐的使用方式

作为Restful API 作者希望将功能相似的请求处理作为一个模块来开发,写在一个模块中,然后导出,如下:

//logic.js
function login(request,response){};
function loginOut(request,response){};
function getVcode(request,response){};
//export
module.exports.login = login;
module.exports.loginOut = loginOut;
module.exports.getVcode = getVcode;

再在配置文件中声明其处理逻辑

const logic = require('./logic.js');
var rest = require('nrest');
rest.conf = {   //配置 NRest 框架大多数的功能配置都写在该配置里
    prot:80,    //监听端口
    rest:{      //restful 接口
        '/logic:':{
            GET: {
                login: logic.login,
				loginOut:logic.loginOut,
				getVcode:logic.getVcode
            }
        }
    }
};

function helloHandle(request,response){
    response.end("hello");
}
1.0.4

8 years ago

1.0.3

9 years ago

1.0.2

9 years ago

1.0.1

9 years ago

1.0.0

9 years ago