Web框架-mojo.js
2022-06-23 18:18:04 阿炯

本站赞助商链接,请多关照。 mojo.js 是 Node.js 实时 Web 框架,可将它视作采用 TypeScript 重写的 Mojolicious(Perl 开发的 Web 框架)。mojo.js 使用了所有最新的 JavaScript 特性,专为聚焦超媒体 (hypermedia) 的后端 Web 服务精心设计。采用MIT协议授权。


The Mojolicious real-time web framework for Node.js. Written in TypeScript. Meticulously designed for hypermedia-driven backend web services using all the latest JavaScript features.


主要特性

实时 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 解析器。
基于 class、async/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 模式,同时还支持这些单文件应用程序进行原型化。

下面是一个完整的 Web 应用

import mojo from '@mojojs/core';
const app = mojo();
app.get('/', ctx => ctx.render({text: 'I ♥ Mojo!'}));
app.start();

使用内置命令系统启动 Web 服务器

$ node index.mjs server
[77264] Web application available at http://127.0.0.1:3000/

使用HTTP客户端对其进行测试

$ curl http://127.0.0.1:3000/
I ♥ Mojo!

上文提及了 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。


最新版本:1.0
历经一年多的开发,mojo.js 终于于2022年6月下旬发布了首个主要版本 1.0。


官方主页:
https://mojojs.org/
https://github.com/mojolicious/mojo.js/