简单,易用,功能完整开袋即食的 Node.js 框架。
Node 16 +
下载最新的发行包,解压后即可开始开发,开启 TypeScript 编译并执行 node ./index
可运行网站。
Captcha, Consistent, Crypto, Db (MySQL), Dns (DNSPod, Alibaba Cloud), Fs, Kv (Redis), Net, Scan, Session, Sql, Ssh (Shell, Sftp), Text, Time, Ws, Zlib.
秉承开袋即食的原则,封装统一风格的常用类库。
通过调用 Core.sendRestart 方法, 您可以在不中断任何现有业务和连接的情况下平滑的实现新旧代码交替热更新。
创建基于 CPU 核心数量的多进程模型, 充分提高多核 CPU 的利用率。
同一进程中的不同站点如果连接到同一个 Db、Kv 等服务器, 则共享同一个连接池, 最大限度地提高效率并减少开销。
const res = await lNet.open('https://xxx/test').post().data({ 'a': '1', 'b': '2' }).request();
也可以这样用:
const res = await lNet.get('https://xxx/test');
可以设置自定义的解析结果:
const res = await lNet.get('https://xxx/test', {
'hosts': {
'xxx': '111.111.111.111'
}
});
也可以选择本地的其他网卡来访问:
const res = await lNet.get('https://xxx/test', {
'local': '123.123.123.123'
});
更拥有完整的 Cookie 管理器,可以轻松将 Cookie 获取并存在任何地方,发送请求时,系统也会根据 Cookie 设置的域名、路径等来选择发送,并且 Set-Cookie 如果有非法跨域设置,也会被舍弃不会被记录,就像真正的浏览器一样:
const res1 = await lNet.get('https://xxx1.xxx/test1', { 'cookie': cookie });
const res2 = await lNet.get('https://xxx2.xxx/test2', { 'cookie': cookie });
提示:Net 库同时支持传入 options 和 open 链式操作,如 await lNet.open('xxx').follow().timeout(60).save(this._config.const.rootPath + 'doc/test.txt').request();
拥有大量好用的接口,可以轻松的从数据库筛选出需要的数据:
const ls = Order.where<Order>(this, db, {
'state': '1'
}).by('id', 'DESC').page(10, 1);
const list = await ls.all();
const count = await ls.count();
const total = await ls.total();
获取一个用户:
const user = await User.select<User>(this, db, ['id', 'user']).filter([
['time_add', '>=', '1583405134']
]).first();
使用 checkXInput 方法,可以进行 XSRF 检测,防止恶意访问。
借助 Scan 库可以轻松实现扫码登录的功能。
使用 net 库的 rproxy 方法,配合路由参数,可轻松实现反向代理功能。
let str: string = Core.random(16, Core.RANDOM_N)
Captcha.get(400, 100).getBuffer();
const userList = await User.where<User>(this, db, [
['state', '!=', '0'],
{
'type': ['1', '2', '3'],
'is_lock': '0'
}
]).all();
提示:所有数据库操作都已经做了安全防注入处理。
sql.select(['SUM(user.age) age'], 'order').leftJoin('user', {'order.user_id': lSql.column('user.id')});
将输出:
SELECT SUM(`test_user`.`age`) AS `age` FROM `test_order` LEFT JOIN `test_user` ON `test_order`.`user_id` = `test_user`.`id`
写起来好轻松!
await this._loadLocale(this._get['lang'], 'test');
return this._l('copy');
根据 lang 值不同,将输出:Copy、复制、複製、コピー等,在站点目录 /data/locale/ 中配置。
根据字符串、数字、比对大小甚至是正则,对提交的数据进行直接校验,方便!
{
'he': ['require', [0, 'The he param does not exist.']],
'num': ['> 10', [0, 'The num param must > 10.']],
'reg': ['/^[A-CX-Z5-7]+$/', [0, 'The reg param is incorrect.']],
'arr': [['a', 'x', 'hehe'], [0, 'The arr param is incorrect.']]
}
参见:/test/ctr-checkinput
你可以访问 /test/ 来查看更多示例。
本框架基于 Apache-2.0 许可。