ä¸ć–‡ | Update log | Feedback | Gitee | Message Board
Documentation will continue to be improved
- Simple and efficient architecture, full TS writing, highly friendly TS declaration support
- Support highly customized middleware system
- Built-in router middleware
- JSON middleware: Support JSON files for data storage
- CORS middleware: supports cross-origin requests
- Static Middleware: Support static file directories
- Form middleware: Support formdata parsing and file upload
- Config middleware: supports highly flexible parameter configuration and dynamic change and monitoring 9.log Middleware: Support flexible logging system and log level control
- MySQL Middleware: Supports MySQL connections
- MongoDB middleware: Support for MongoDB connections
npm i sener
Simple demo:
import {Sener} from 'sener';
new Sener();
options:
new Sener({
port: 9000, // port: default value is 9000
middlewares: [], // Sener middlewares
});
Sener stores all files in the sener-data folder
In the development environment, the root directory is the directory where the current cmd is executed, and in the production environment, the root directory is homedir
const BASE_SENER_DIR = path.resolve(
`${IS_DEV ? process.cwd() : homedir()}`,
`./sener-data`
);
Router middleware
import {Sener, Router} from 'sener';
const router = new Router({
'/demo': ({ query }) => {
query.message = 'from get';
return { data: query };
},
'post:/demo': async ({ body }) => {
body.message = 'from post'
return { data: body };
},
});
new Sener({
middlewares: [router],
});
Use a JSON file as a database
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()],
});
options
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
})
Middleware that handles cross-origin requests
npm i sener sener-cors
import {Sener, Cors} from 'sener';
new Sener({
middlewares: [new Cors()],
// new Cors(header); Or Set your custom headers
});
options
new Cors({
// headers: Set your custom headers
})
Middleware that handles static resources
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
});
options
new Static({
dir: './public', // Static directory, default value is ./public
})
Middleware that handles formdata and file uploads
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
});
options
new Form({
dir: './public/upload', // File upload directory, default value is ./public/upload
})
npm i sener sener-log
Middleware that supports logging systems
import {Sener, Router} from 'sener';
import {Log} from 'sener-log';
const router = new Router({
'post:/test': ({ query, logger }) => {
logger.log('msg', 'payload')
return { query }
},
});
new Sener({
middlewares: [new Log(), router],
});
typings
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;
}
options
new Log({
dir: '', // The directory where the log file is stored. default value is '', use root directory
useConsole: false, // Whether to enable console.log Print logs when the service is running. It is not recommended to turn on the production environment. default value is false
maxRecords: 10000, // The maximum number of stored records for a single log file , default value is 10000
level: -1, // The level of log printing, logs with a level less than this number will not be printed
// level?: (()=>number) Level can also be a method for dynamically obtaining level values, typically used in conjunction with config middleware
})
Middleware that supports flexible use of JSON configuration files
npm i sener sener-config
import {Sener, Router} from 'sener';
import {Config} from 'sener-config';
const router = new Router({
'post:/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 { 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: '', // directory for save config files. default value is ''
file: 'default', // file name of your config file. default value is 'default'
// file: ['c1', 'c2'], // Passing in an array indicates that multiple profiles are used
format: false, // Whether to format the JSON file. Default value: The development environment is false and the production environment is true
})
Middleware that supports mysql
npm i sener sener-mysql
import {Sener, Router} from 'sener';
import {Mysql} from 'sener-mysql';
const router = new Router({
'post:/test': async ({ query, querySql, mysqlConn }) => {
const { results, fields } = await querySql('select * from user');
// Or use mysqlConn
return { query }
},
});
const mysql = new Mysql({
// Please refer to (https://www.npmjs.com/package/mysql) for details
}
mysql.connection;
new Sener({
middlewares: [mysql, router],
});
Please refer to mysql for details
Middleware that supports mongodb
npm i sener sener-mongodb
import {Sener, Router} from 'sener';
import {MongoDB} from 'sener-mongodb';
const router = new Router({
'post:/test': async ({ query, queryMongoDB, mongoClient }) => {
const {db, close} = await queryMongoDB('user');
// do something
// Or use mongoClient
return { query }
},
});
const mongodb = new MongoDB({
// Please refer to (https://www.npmjs.com/package/mongodb) for details
}
mongodb.client;
new Sener({
middlewares: [mongodb, router],
});
Please refer to mongodb for details
Documentation will continue to be improved
For now please refer to middleware packages