3.5 KiB
3.5 KiB
rhttpd JavaScript引擎 - 当前状态
✅ 已实现的功能
1. 基础架构
- 模块化结构: 完整的js_engine模块结构
- 错误处理: JsEngineError类型,支持详细的错误信息
- 中间件类型定义: 三个级别的中间件系统
2. JavaScript配置支持
- 配置文件加载: 可以从JavaScript文件加载配置
- 配置解析: 支持
export default { ... }格式 - 错误处理: 详细的配置错误信息
3. 中间件系统基础
- 中间件容器: 支持全局、站点、路由三个级别
- 钩子类型: 支持onRequest、onResponse、onResponseSent三个钩子
- 配置提取: 可以从JavaScript配置文件中提取中间件函数定义
📁 文件结构
src/js_engine/
├── mod.rs # 主模块,导出API
├── error.rs # 错误类型定义
└── types.rs # 类型定义(中间件容器、钩子等)
📋 当前API
JsEngine类型
pub struct JsEngine {
middleware: Arc<MiddlewareContainer>,
}
impl JsEngine {
pub async fn new() -> Result<Self, JsEngineError>;
pub async fn load_config(&self, config_path: &str) -> Result<serde_json::Value, JsEngineError>;
pub async fn execute_middleware(...) -> Result<Option<serde_json::Value>, JsEngineError>;
pub fn middleware(&self) -> &Arc<MiddlewareContainer>;
pub fn has_middleware(&self) -> bool;
}
中间件类型
pub enum MiddlewareHook {
OnRequest(MiddlewareFunction),
OnResponse(MiddlewareFunction),
OnResponseSent(MiddlewareFunction),
}
pub struct MiddlewareContainer {
global: Vec<MiddlewareHook>,
site: HashMap<String, Vec<MiddlewareHook>>,
route: HashMap<String, Vec<MiddlewareHook>>,
}
🧪 示例配置
JavaScript配置示例
// test_config.js
export default {
port: 9090,
globalMiddleware: {
onRequest: async function(req) {
console.log('Global onRequest:', req.method, req.url);
}
},
sites: {
"test.local": {
hostname: "test.local",
middleware: {
onRequest: async function(req) {
if (req.path === '/protected') {
return {
status: 401,
body: JSON.stringify({ error: 'Unauthorized' })
};
}
}
}
}
}
};
TOML配置引用
# config.toml
port = 8080
js_config = "test_config.js"
[sites."example.com"]
hostname = "example.com"
# ...
🔧 如何使用
- 创建JavaScript配置文件
- 在TOML配置中引用:
js_config = "path/to/config.js" - 服务器会自动加载并解析: 配置中的port和中间件信息会被识别
📊 兼容性
- ✅ 向后兼容: 原有JSON和TOML配置继续工作
- ✅ 渐进增强: 只在使用
js_config时才启用JavaScript特性 - ✅ 错误处理: 详细的错误信息和恢复机制
🚀 下一步计划
短期目标
- 真正的JavaScript执行: 集成rquickjs,支持真正的JS代码执行
- 完整中间件执行: 实现MiddlewareExecutor,执行三个级别的中间件链
- 头修改支持: 实现Request/Response对象的头修改API
长期目标
- 性能优化: 确保中间件执行< 5ms
- 错误处理改进: 根据策略立即返回500错误
- 控制台支持: 实现JavaScript的console.log支持
当前实现已经为完整的JavaScript引擎打下了坚实的基础,提供了模块化的架构和清晰的API设计。下一阶段将在此基础上添加真正的JavaScript执行能力。