@ncf/core
v0.0.5
Published
nodejs concise framework
Downloads
2
Maintainers
Readme
这里面是架构核心。
- serviceHub
- serviceLoader 扫描 services 目录并且加载模块,热更新模块
- 调用 config.js 中配置的 extension map,如 .sql 使用 osql-loader 或者 psql-loader, 没有注册的就认为是默认 js,取 exports.faas 作为服务,exports.xxx 作为该服务的配置
- 如何实现服务端视图?
- exports.faas 取视图用到的数据
- exports.view 设置从哪个视图渲染
- view 模块使用 view-loader 预编译变成函数
- middleware 执行完 faas 后,将结果带入到配置的 view fn 结果返回
- 如何区分 internal/对外
- config 中配置哪些扫描,其中哪些对外
- 可以整个目录配置成只对内,如 view 视图模板目录,只对内
config.js 范例
exports.loader = {
sql: require('osql-loader'),
md: require('md-loader'),
json5: require('json5-loader'),
}
exports.loader = (ext, filename) => {
if (ext === 'sql') {
return require('osql-loader');
}
}
配置结果参考
root
dir1
middlewares
loaders 没设置自动取上级,设置可以取上级并修改,this.parent 可以取到上级
subdirs
services
aliases
路由过程, path 切分段落 先看第一段,执行 middlewares, 找目录或者文件,没有找 alias,最终定位到服务。 执行服务的 faas 方法,等待 promise 解析或报错。 中间件可以看到 req, resp, ctx.state;然后做出改变。ctx 没有关于 http 的信息。
todo
- 实现服务自动注册机制
- 实现 loader 机制,根据文件名,文件路径转成服务模块,带 faas 方法的过程
- 实现中间件机制,改变请求响应,设置和提取中间状态
- 配置,服务和中间件还有loader都能够读取 dir/file中的配置,loader 只能读 dir 中的配置
- http gateway 能挂接到核心 core.service(path, request) => Promise
从简单到复杂
- 实现 dirConfig prototype 链
- 然后在实现 module 到所属目录的 dirConfig prototype
- 实现 jsLoader, configLoader,
- 然后再实现 markdown,yaml,json5
- osql,psql 等 loader
- 再实现 DSL loader
- 实现 watch add
- 实现 watch change
- 实现 watch del
- config.middlewares [] 实现中间件机制