sener

Easy-to-use and highly scalable nodejs Web Framework

MIT License

Downloads
72
Stars
9
Committers
2

| English | | | Gitee |

1.

  1. tsts
  2. hooks

sener

  1. router

  2. cookiecookie

  3. sessionsessioncookie

  4. env

  5. cors

  6. ip-monitorip

  7. validator

  8. jsonjson

  9. static

  10. formformdata

  11. config

  12. log

  13. mysqlmysql

  14. mongodbmongodbcollocation

  15. rpcx-trace-id

2.

npm i sener

demo:

import {Sener} from 'sener';
new Sener();

options:

new Sener({
  port: 9000, // port: default value is 9000
  middlewares: [], // Sener middlewares
});

  1. ebuild-cli
npm i ebuild-cli -g
ebuild init <Project name>
cd <Project name>
npm i

sener

  1. github
git clone https://github.com/theajack/sener-best-practice.git

3.

3.1 router

import {Sener, Router} from 'sener';
const router = new Router({
    '/demo': ({ query }) => {
    // or: 'get:/demo': ({ query }) => { // get: prefix can be ignored
        query.message = 'from get';
        return { data: query };
        // Custom headers or statusCode
        // return { data: query, headers: {}, statusCode: 200  };
    },
    'post:/demo': async ({ body }) => {
        body.message = 'from post'
        return { data: body };
    },
});
new Sener({
  middlewares: [router], 
});

3.2 json

json

npm i sener sener-json
import {Sener, Router} from 'sener';
import {Json} from 'sener-json';
const router = new Router({
    '/data': ({ query, read }) => {
        // 'data' is json file name
        return { data: read('data') };
    },
    'post:/data': async ({ body, write }) => {
        const { data, save, id } = write('aa');
        body.message = 'from post'
        data.push({...body, id: id()}); // Add increment id
        save(); // save it, THIS Method must be called
        return { data };
    },
});
new Sener({
  middlewares: [router, new Json()],
});
new Json({
  dir: '', // directory for save json files. default value is ''
  format: false, // Whether to format the JSON file. Default value: The development environment is false and the production environment is true
})

3.3 cors

npm i sener sener-cors
import {Sener, Cors} from 'sener';
new Sener({
  middlewares: [new Cors()], 
  // new Cors(header); Or Set your custom headers
});
new Cors({
  // headers: Set your custom headers
})

3.4 static

npm i sener sener-static
import {Sener} from 'sener';
import {Static} from 'sener-static';
new Sener({
  middlewares: [new Static()], 
  // new Static({dir}); dir default value is ./public
});
new Static({
  dir: './public', // Static directory, default value is ./public
})

3.5 form

form

npm i sener sener-form
import {Sener, Router} from 'sener';
import {Form} from 'sener-form';

const router = new Router({
    'post:/upload': ({ formData, files }) => {
        return { formData, files }
    },
});

new Sener({
  middlewares: [new Form(), router], 
  // new Form({dir}); dir default value is ./public
});
new Form({
  dir: './public/upload', // File upload directory, default value is ./public/upload
})

3.6 log

npm i sener sener-log
import {Sener, Router} from 'sener';
import {Log} from 'sener-log';

const router = new Router({
    'get:/test': ({ query, logger }) => {
        logger.log('msg', 'payload')
        return { data: query }
    },
});

new Sener({
  middlewares: [new Log(), router], 
});
class Logger {
  log(msg: string | IMessageData, payload?: any, type?: TLogType): void;
  get traceid (): string;
  refreshDurationStart(): void;
  refreshTraceId(): void;
}

interface IMessageData {
  msg?: string;
  payload?: any;
  type?: 'error' | 'log' | 'warn' | 'info';
  level?: number;
  extend?: object;
}
new Log({
  dir: '' // 
  useConsole: false, // .log false
  maxRecords: 10000, //  10000
  level: -1, // 
  // level?: ()=>number // 
})

3.7 config

JSON

npm i sener sener-config
import {Sener, Router} from 'sener';
import {Config} from 'sener-config';

const router = new Router({
    'get:/test': ({ query, config, writeConfig, onConfigChange }) => {
        const level = config.level;
        level(); // read config
        level(5); // write config
        writeConfig('level', 5) // write config with writeConfig
        onConfigChange(({key, value, prev}) => { // on config change
            console.log(key, value, prev);
        })
        return { data: query }
    },
});

const config = new Config();

// Use config instance

config.onConfigChange(({key, value, prev}) => { // on config change
    console.log(key, value, prev);
});

config.data.level(); // read config

config.data.level(5); // write config

config.writeConfig('level', 2); // write config with writeConfig

new Sener({
  middlewares: [config, router], 
});

options

new Config({
  dir: '', // 
  initial: {}, // key(.json) {_default: {}}
  format: false, //  JSON 
})

3.8 mysql

mysql

npm i sener sener-mysql
import {Sener, Router} from 'sener';
import {Mysql} from 'sener-mysql';

const router = new Router({
    'get:/test': async ({ query, querySql, mysqlConn }) => {
        const { results, fields } = await querySql('select * from user');
        // Or use mysqlConn
        return { data: query }
    },
});

const mysql = new Mysql({
  //   [mysql](https://www.npmjs.com/package/mysql) 
}

mysql.connection;

new Sener({
  middlewares: [mysql, router], 
});

mysql

3.8.1

SQLAPI

3.9 mongodb

mongodb

npm i sener sener-mongodb
import {Sener, Router} from 'sener';
import {Mongo} from 'sener-mongodb';

const router = new Router({
    'get:/test': async ({ query, queryMongoDB, mongoClient }) => {
        const {db, close} = await queryMongoDB('user');
        // do something
        // Or use mongoClient
        return { data: query }
    },
});

const mongodb = new Mongo({
  //   [mongodb](https://www.npmjs.com/package/mongodb)
})

mongodb.client;

new Sener({
  middlewares: [mongodb, router], 
});

mongodb

3.9.1

mongodbcolAPI

3.10 rpc middleware

rpc

web

x-trace-id headertracidlog

npm i sener sener-rpc

3.10.1

import {Sener, Router} from 'sener';
import {RPC} from 'sener-rpc';

const router = new Router({
    'get:/test': async ({ query, rpc }) => {
        const list = rpc.comment.get('/message', {page: 1}); // url and query
        // use rpc.comment.request for more details
        return { data: {query, list} }
    },
});
new Sener({
  middlewares: [new RPC({
    user: 'http://localhost:3000', // user base
    comment: 'http://localhost:3001', // comment base
  }), router], 
});
  1. createServices
import {Sener, Router} from 'sener';
import {RPC, Request} from 'sener-rpc';

class CommentRequest extends Request {
    getList ({ app = 'common', index = 1 }: {
        app?: string
        index?: number
    } = {}) {
        return this.get('/message', {
            app,
            index,
            size: 10,
        });
    }
}

function createServices(traceid = '') {
    const base = (port: number) => `http://localhost:${port}`;
    return {
        comment: new CommentRequest({ base: base(3001), traceid }),
    };
}

const router = new Router({
    'get:/test': async ({ query, rpc }) => {
        const list = rpc.comment.getList();
        return { data: {query, list} }
    },
});

new Sener({
  middlewares: [new RPC(createServices), router], 
});

3.10.1

  1. npm
npm i sener-rpc
import {WebRPC} from 'sener-rpc/dist/web.umd';

// 1. base
const comment = new WebRPC('http://localhost:3001');
await comment.get('/message', {page: 1});

// 2. map
const rpc = new WebRPC({
    user: 'http://localhost:3000', // user base
    comment: 'http://localhost:3001', // comment base
});
await rpc.comment.get('/message', {page: 1});

// 3. 
class Comment extends WebRPC {
    getList ({ app = 'common', index = 1 }: {
        app?: string
        index?: number
    } = {}) {
        return this.get('/message', {
            app,
            index,
            size: 10,
        });
    }
}
await (new Comment()).getList();
  1. cdn
<script src='https://cdn.jsdelivr.net/npm/sener-rpc'></script>
<script>
  SenerRpc.WebRPC
</script>

  1. Dir

Sener ~/sener-data

let BASE_SENER_DIR = path.resolve(homedir(), './sener-data')

sener

Sener.Dir = 'xxxxx'
  1. Version
Sener.Version