Web 框架 mojo.js 1.0 正式发布,从 Perl 到 Node.js


历经一年多的开发,mojo.js 终于发布了首个主要版本 1.0。

mojo.js 是 Node.js 实时 Web 框架,可将它视作采用 TypeScript 重写的 Mojolicious(Mojolicious 是 Perl 开发的 Web 框架)。mojo.js 使用了所有最新的 JavaScript 特性,专为聚焦超媒体 (hypermedia) 的后端 Web 服务精心设计。

主要特性

  • 实时 Web 框架,开发者可轻松地将单文件原型扩展为结构良好的 MVC Web 应用程序。
    • 开箱即用的强大 RESTful 路由、WebSockets、插件、命令、日志记录、模板、内容协商 (content negotiation)、会话管理、表单和 JSON 验证、测试框架、静态文件服务器、集群模式、CGI 检测、一等公民的 Unicode 支持等
  • 强大的 Web 开发工具包,开发者可以将它用于各种应用程序,独立于 Web 框架。
    • 高性能 HTTP 和 WebSocket 客户端 / 服务器实现,支持 HTTPS/WSS、cookie、重定向、urlencoded/multi-part 表单、文件上传、JSON/YAML、HTML/XML、模拟数据、API 测试、HTTP/SOCKS 代理和 gzip 压缩。
    • 支持 CSS 选择器的 HTML/XML 解析器。
  • 基于 classasync/await 的 API,采用 TypeScript 编写,几乎不需要依赖,因此可避免 NPM 依赖地狱。
  • 基于具有数十年积累的 Mojolicious 和 Catalyst 的代码,免费且开源。

下面的代码示例是一个"hello world"单文件应用,包含 WebSockets:

import mojo from '@mojojs/core';

const app = mojo();

app.get('/', async ctx => {
await ctx.render({inline: inlineTemplate});
});

app.websocket('/echo', ctx => {
ctx.plain(async ws => {
for await (const message of ws) {
ws.send(message);
}
});
});

app.start();

const inlineTemplate = `
<script>
const ws = new WebSocket('<%= ctx.urlFor('echo') %>');
ws.onmessage = event => { document.body.innerHTML += event.data };
ws.onopen= event => { ws.send('Hello World!') };
</script>
`;

但 mojo.js 并不是真正的单文件应用程序。作为一个非常传统的超媒体框架和 Mojolicious 的精神继承者,它鼓励开发者采用 MVC 模式,同时还支持这些单文件应用程序进行原型化。

上文提到了 mojo.js 与 Mojolicious 的渊源。事实上,mojo.js 的诞生与 Perl6(已被重命名为 Raku)也有一定关系。当 Perl6 发布时,官方就已计划将 Mojolicious 移植到除 Perl5 外的更多语言。此时,JavaScript 不断发展,添加了 ES6 classes, async/await, ES modules, 箭头函数, const/let 关键字等特性。Node.js 也将 JavaScript 带到了服务器端。在语言层面上,Perl 和 JavaScript 之间有着非常密切的关系,凭借着这些契机,Mojolicious 团队创建了 mojo.js 项目。

Mojolicious 开发团队表示,打造 mojo.js 并不是意味着他们要放弃 Mojolicious,因为目前仍有许多非常喜欢 Perl 的开发,他们会继续开发和维护 Mojolicious。

 


相關推薦

2023-09-10

过多导致的开发低效问题。它将运行时、打包工具、测试框架等功能融合在一个工具中,提供开箱即用的高性能体验。 Bun兼容现有的Node.js生态,几乎所有Node程序可以无缝迁移。更令人振奋的是,Bun的启动速度可达Node的4倍,运

2023-06-15

比 28.15%),其次是 SQLite(占比 26.93%)。 最流行 Web 框架和技术 Node.js 和 React.js 是最流行的两种 Web 技术。专业开发者使用两者的比例相当,而正在学习编程的人使用 Node.js 多于 React(52% vs 48%)。 其他较受欢迎的还包括

2022-06-20

Tauri 1.0 已正式发布。 Tauri 是一个桌面 UI 框架,可让开发者使用每个平台的 Webview 技术栈为所有主要桌面操作系统构建应用程序,目前支持 Windows/macOS/Linux 等平台。开发者通过 Tauri 几乎可以使用任何编译为 HTML、JS 和 CSS 的前端

2023-01-03

销和强大的插件架构为开发者提供最佳体验的 Node.js Web 框架,速度极快,它的灵感来源于 Hapi 和 Express。 Fastify 4.11.0 发布了,本此更新带来以下内容: 修复:使用自定义记录器时,使用通用记录器注册插件 #4436 build(dep

2023-03-21

销和强大的插件架构为开发者提供最佳体验的 Node.js Web 框架,速度极快,它的灵感来源于 Hapi 和 Express。 Fastify 4.15.0 发布了,本此更新带来以下内容: build(deps-dev):将 tsd 从 0.25.0 提升到 0.26.0 #4614 feat:为 prettyPrint 使

2023-03-06

销和强大的插件架构为开发者提供最佳体验的 Node.js Web 框架,速度极快,它的灵感来源于 Hapi 和 Express。 Fastify 4.14.0 发布了,本此更新带来以下内容: Schema 错误格式化程序类型 #4570 修复 typecript 与 ajv-compiler 的集

2022-11-18

Nuxt 是使用简便的 Web 框架,用于构建现代和高性能的 Web 应用,可以部署在任何运行 JavaScript 的平台上。 Nuxt 3.0 今天正式发布了稳定版,3.0 基于 Vue 3,为 TypeScript 提供了“一等公民”支持,并进行了一次彻底的重构,对内核进

2022-10-18

销和强大的插件架构为开发者提供最佳体验的 Node.js Web 框架,速度极快,它的灵感来源于 Hapi 和 Express。 Fastify 4.9.0 发布了,本此更新带来以下内容: 修复:错误处理程序的内容类型猜测 #4329 build(deps-dev): 将 fluent-json-schema

2022-06-12

销和强大的插件架构为开发者提供最佳体验的 Node.js Web 框架,速度极快,它的灵感来源于 Hapi 和 Express。 Fastify 4.0.1 发布了,本此更新带来以下内容: ci:移动concurrency到正确的工作流程 #3981 chore(docs): 修正错字 #3983

2022-07-22

销和强大的插件架构为开发者提供最佳体验的 Node.js Web 框架,速度极快,它的灵感来源于 Hapi 和 Express。 Fastify 4.3.0 发布了,本此更新带来以下内容: 不缓存不必要的内容类型 #4134 修复:默认 clientError 回复重用连接(

2022-01-18

Faker.js 受到媒体和社区的广泛关注,他们计划后续发布正式公告。

2023-04-06

一个用于构建高效、可扩展的 Node.js 服务器端应用程序的框架。它使用 TypeScript 和 JavaScript 构建,并结合了 OOP(面向对象编程)、FP(功能编程)和 FRP(功能反应式编程)等元素。 Nest.js 9.4 正式发布,该版本更新内容如下:

2023-10-27

titbit v23.3.0 已经发布,Node.js 环境的 Web 后端框架 此版本更新内容包括: bodyparser.js 升级body解析方式。 其他一些细节更新。 详情查看:https://gitee.com/daoio/titbit/releases/v23.3.0

2023-10-31

titbit v23.3.5 已经发布,Node.js 环境的 Web 后端框架 此版本更新内容包括: bodyparser.js 解析multipart/form-data格式的数据去掉了split方式,改为跳跃式,提高了性能和安全性。并限制消息头数量,对超过最大消息头长度的文件不