Share your code. npm Orgs help your team discover, share, and reuse code. Create a free org »

    liteserverpublic

    liteserver

    liteserver 是一个轻量级的http服务器。
    liteserver 扩展了 request对象,response对象,使得编写web应用更简单。
    
    liteserver集成了常用的http输入接口(get,post,cookie)和输出接口(模板引擎、json输入,jsonp输出)
    程序则关心控制的编写即可
    
    liteserver可方便的结合cluster使用,以创建多进程服务
    

    使用方法

    安装模块

    npm install liteserver
    

    编写控制器

    每个控制器接收三个参数: request response config
    
    function index(req,res,config){ // 每个控制器,接收三个
      var router = req.getRouter();
      console.log(router);
    }
    exports = module.exports = index;
    

    编写服务index.js

    var LiteServer = require('liteserver');
    var Log = LiteServer.Log;
    var serv = LiteServer.create(cfg);  // cfg 参考config配置一节
    var controller = serv.loadController(path); // 从path路径加载控制器,path下所有的js文件,以及目录
    serv.router({
      '/index' : controller.index,
      '/favicon' : serv.favicon(icopath),
      '/custom':function(req,res,cfg){
        // 快速定义一枚controller 
      }
    }).view({
      constant : {js : 'http://static.abc/js'}
      compress : true, // compress output html
      debug:debug, // true or false 
    }).start(function(err){
      if(err){
        console.log(err);
      }else{
        console.log('server start!');
      }
    });
    

    config 配置

    config对象
    
    {
      root: string 服务所在的路径 ,加载控制器、模板等等,都依赖此路径
      port: string 服务端口,目前只支持单个端口的绑定。多端口暂不考虑
      tpl: path 模板存放地址,相对于root的地址或者绝对地址,注意path "/"开头,表示绝对地址
      debug: bool 是否调试状态
    }
    
    配置模板引擎
    
    serv.setView(viewObject); // viewObject 必须实现 render('tpl',{obj}) 方法
    
    配置路由解析器
    
    serv.setRouter(function(){
      // TODO your own router parser
    })
    
    配置 filter, filter在router之前执行,相当于入户的电表开关,可以控制访问权限
    serv.filter(function (req, res, config, next) {
      // if allow
    });
    配置log模块, 两组log文件,不同的log等级,按天切分
    
    Log.create({
      sys : {
        file : './logs/test.%year%-%month%-%day%.log',
        level : 'DEBUG',
        duration : 4
      },
      login : {
        file : './logs/test.%year%-%month%-%day%.log',
        level : 'WARN',
        duration : 4
      }
    });
    

    路由规则

    http://domain/controller/action/param[0]/param[1]/param[...]
    上面可以看出,所有的请求路径都被映射成controller、action、param三部分
    通过req.getRouter()获得这个router对象
    某些情况,用户请求地址到controller,则会有默认的action响应,这由controller来控制
    action往下的路由是自由的,controller自行控制
    
    var router = req.getRouter()
    

    req对象的扩展

    var router = req.getRouter()  // 获取路由信息
    var get = req.getQuery()      // 获取get参数,注意数据值没有decodeURIComponent()过,按需处理
    var cookie = req.getCookie()  // 获取cookie,注意数据值没有decodeURIComponent()过,按需处理
    
    req.getPost(function(err, post, files){   // 获取简单post的数据,回调函数的形式
      console.log(post);
    });
    
    req.on('post',function(err, post, files){  // 获取简单post的数据,事件形式
      console.log(post);
    });
    req.getPost();
    
    req.dispatch(actionName, {
      // req分发请求动作,有actionName来指定调用的具体的action方法,注意action方法$开头
      $default : function (req, res, config) {
        // $default 方法必须有
      },
      $test : function (req, res, config) {
    
      }
    }); 
    

    res对象的扩展

    res.render(tpl, obj)     // 渲染模板,tpl为模板文件相对地址(相对模板的目录),obj为模板中的变量,注意这里直接res.end()了
    res.setCookie(name, value, option) // 设置cookie,  option为对象{expires,path,domain,httponly}
    res.redirect(path)      // path == string 为 302 , path为router对象,则直接在服务器端跳转至相应的controller.action
    res.json(obj)           // json输出,注意这里直接 res.end()了,不能再继续http输出
    res.jsonp(cb, obj)       // jsonp格式输出,注意这里直接res.end()了,不能再有http输出
    res.gzip(obj)           // gzip输出, 支持 obj 为 Object(自动JSON输出) 或者 String ,stream模式需自行编写
    

    自定义错误返回

    目前支持两种错误自定义
    当controller没找到时:
      404 handler将被触发;
    当controller执行过程中,发生意外的时候:
      500 handler将被触发;
    
    注册错误handler
    serv.router({
      '500' : function (req, res, config) {
        var err = req.error; // get error object
        // TODO handle error
      },
      '404' : function (req, res, config) {
    
      }
    });
    

    log日志系统

    var log = require('liteserver').Log.create({
      sys : {
        file : './logs/test.%year%-%month%-%day%.log',  // 支持按天、月、年分割
        level : 'DEBUG', // can be DEBUG|INFO|TRACE|WARN|ERROR|FATAL|OFF
        duration : 4
      },
      login : {
        file : './logs/test.%year%-%month%-%day%.log',
        level : 'WARN',
        duration : 4
      },
      std : {           // without file, log will write to process.stdout by default 
        level : 'DEBUG' 
      }
    });
    
    log对象包含以下方法:
        log.debug(msg)
        log.trace(msg)
        log.info(msg)
        log.warn(msg)
        log.error(msg)
        log.fatal(msg)
    

    测试

    mocha test --coverage
    

    Keywords

    none

    install

    npm i liteserver

    Downloadslast 7 days

    46

    version

    0.3.0

    license

    none

    last publish

    collaborators

    • avatar
    • avatar