@elysiumjs/ mnemosyne (英语)
Elysium.js应用的数据库抽象和缓存.
安装
bun add @elysiumjs/mnemosyne
使用量
MnemosyneModule 提供缓存( n)Cache.redis 财务报告和审定财务报表 Cache.memory)和 db:seed 命令。 数据库驱动模块,例如 DrizzleModule 从 @elysiumjs/mnemosyne-drizzle 为您导入它, 因此您只有在想要配置缓存或者在没有数据库的情况下使用缓存时才会自己添加 :
import { Application, RedisModule } from '@elysiumjs/core';
import { MnemosyneModule } from '@elysiumjs/mnemosyne';
@Application.register({
modules: [
RedisModule.with({
default: 'cache',
connections: { cache: { url: process.env.REDIS_URL! } }
}),
// Opt out of a cache with `redis: false` or `memory: false`.
MnemosyneModule.with({ cache: { memory: { ttl: 60_000, lruSize: 5000 } } })
]
})
export class App extends Application {}
任何 Keyv 商店都可以用它自己的缓存备份 stores,读取 Cache.store(name)在云花岗工人, KeyvWorkersKV 从 @elysiumjs/runtime-workers 存储 KV 命名空间中的条目 :
import { KeyvWorkersKV } from '@elysiumjs/runtime-workers';
MnemosyneModule.with({
cache: { redis: false, stores: { kv: () => new KeyvWorkersKV({ binding: 'CACHE' }) } }
});
await Cache.store('kv').set('greeting', 'hello', 120_000);
种子
一个渗出器会写入应用程序需要运行的行,例如引用数据. 把它列入 seeders 模块,以及 styx db:seed 运行在那个模块,所以它 run 在自己的交易中, 使用模块的服务 :
import { Service } from '@elysiumjs/core';
import { Seeder } from '@elysiumjs/mnemosyne';
@Seeder.register()
export class CountriesSeeder extends Seeder {
protected async run(@Service.inject() countries: CountryRepository): Promise<void> {
await countries.upsertMany(await readCountries());
}
}
@Seeder.register({ after: [CountriesSeeder], manual: true })
export class CitiesSeeder extends Seeder {
protected async run(@Service.inject() cities: CityRepository): Promise<void> {
await cities.upsertMany(await readCities(this.input.file));
}
}
@Module.register({ services: [CountryRepository, CityRepository], seeders: [CountriesSeeder, CitiesSeeder] })
export class GeoModule extends Module {}
styx db:seed # every seeder that is not manual
styx db:seed --only geo.cities --file cities.zip
styx db:seed --arg region=africa --list # prints the order, runs nothing
- 播种者每召出一来,就写作上起.
- 以其模块和类命名,不包含
Module财务报告和审定财务报表Seeder后缀,在kebab案中geo.cities(见上文).name再来一个. after列出两个运行时先运行的种子类。 它设定了命令,而不添加:--only geo.cities运行geo.cities一个人 给一个功能,after: () => [CountriesSeeder],当导入周期未定义类别时.manual: true种子只运行于--only给他们起名字.env将植入物限制在一些环境中connection选择交易的连接.--file编辑--arg key=value双向种子到达种子者this.input.file财务报告和审定财务报表this.input.args。 。 。 .styx make:seeder --name CountriesSeeder --module geo写入seeders/countries.seeder.ts。 。 。 .
名单
Listing.define() 说明什么客户端可以过滤和排序一个列表,以及它如何页面. Listing.parse() 验证查询字符串和仓库 list() 运行它:
import { Listing } from '@elysiumjs/mnemosyne';
const PostListing = Listing.define(Post, {
filters: { status: ['eq', 'in'], title: ['contains'] },
sort: ['createdAt', 'title'],
defaultSort: '-createdAt'
});
@Http.get('/', { response: Listing.pageSchema(PostResource) })
public list(@Http.query(Listing.schema(PostListing)) query: Listing.Params<typeof PostListing>) {
return this.posts.list(Listing.parse(PostListing, query));
}
- 光标 pagining 是默认值 :
cursor在上一页最后一行之后并有一个页面给出的分数{ data, nextCursor }。页数保持稳定,同时增加行数,每行费用不变. pagination: 'offset'从 1 到 1 的页码page页面{ data, page, limit, total },合计数行的过滤器匹配。 它适合跳到一页的桌子.Listing.pageSchema(item)财务报告和审定财务报表Listing.offsetPageSchema(item)描述各页.Listing.page()财务报告和审定财务报表Listing.offsetPage()建造它们,Listing.mapPage(page, map)绘制他们的行图,例如模型到资源,以及Listing.filterPage(page, keep)保持通过上游的行.- 页面及其图案都有标记,以便截取器自行制作:
Listing.isPage(value)财务报告和审定财务报表Listing.paginationOf(page)读取一页,Listing.pageSchemaPagination(schema)财务报告和审定财务报表Listing.itemSchemaOf(schema)读取一个页面计划.
模型和寄存器都是用一个驱动软件包来建造的. 见 @elysiumjs/mnemosyne-drizzle。 。 。 .
许可证
这个项目根据Apache许可证2.0版本获得许可. 见 自由主义 需要更多信息的文件.