📜  moye (1)

📅  最后修改于: 2023-12-03 15:03:02.995000             🧑  作者: Mango

Moye

Moye 是一款用于构建可扩展的 Web 应用程序的 Node.js 框架。它以简单、灵活为设计理念,提供了路由、控制器、模型、视图等基本组件,同时也支持第三方中间件和插件。

Moye 的主要特点包括:

  • 可扩展性强:支持自定义中间件和插件;
  • 灵活简单:代码量较小、使用方便;
  • 相对稳定:经过多年实践,已经相对稳定;
  • 社区活跃:拥有一个较为活跃的开发社区,提供一定的技术支持。
安装

通过 npm 安装最新版的 Moye:

npm install moye

如果需要安装开发版,可以从 GitHub 上克隆 Moye 的仓库:

git clone https://github.com/youyiqin/moye.git
使用

以下是一个简单的 Moye 应用程序:

const moye = require('moye');

const app = moye();

app.get('/', (ctx) => {
  ctx.text('Hello World!');
});

app.listen(3000, () => {
  console.log('Moye app is listening at http://localhost:3000');
});

以上代码会创建一个最简单的 Moye 应用程序,监听本地的 3000 端口,当接收到 GET 请求时返回 "Hello World!" 信息。

路由

Moye 支持基于路由的请求处理,可以通过 app.method() 方法来注册路由:

app.method(path, [middleware], callback);

其中,path 是路由的匹配路径,middleware 是可选的中间件,用于处理请求前的逻辑处理,callback 是路由的处理函数。

以下是一些 Moye 支持的路由匹配方式:

// 匹配 path 路径的 GET 请求
app.get(path, [middleware], callback);

// 匹配 path 路径的 POST 请求
app.post(path, [middleware], callback);

// 匹配 path 路径的 PUT 请求
app.put(path, [middleware], callback);

// 匹配 path 路径的 DELETE 请求
app.del(path, [middleware], callback);

// 匹配 path 路径的所有 HTTP 方法
app.all(path, [middleware], callback);

path 参数可以是字符串型的 URL 路径,也可以是正则表达式。

控制器和模型

Moye 支持控制器和模型,用于更好地组织代码。

以下是一个控制器的例子:

const UserController = {
  async index(ctx) {
    const users = await UserModel.findAll();
    ctx.render('users/index', { users });
  },

  async show(ctx) {
    const user = await UserModel.findById(ctx.params.id);
    ctx.render('users/show', { user });
  },
};

控制器定义了两个路由处理函数:indexshow。这两个处理函数对应了两个不同的路由。

以下是一个模型的例子:

const UserModel = {
  async findAll() {
    return await db.query('SELECT * FROM users');
  },

  async findById(id) {
    return await db.query('SELECT * FROM users WHERE id = ?', [id]);
  },
};

模型定义了一些数据库操作的方法,例如 findAllfindById。这些方法用于在控制器中调用。

视图

Moye 使用模板引擎来渲染视图。目前支持以下模板引擎:

  • EJS
  • Pug
  • Handlebars
  • Mustache

以下是一个使用 EJS 模板引擎的例子:

// 设置模板引擎为 EJS
app.set('view engine', 'ejs');

// 渲染 EJS 模板文件
app.get('/', (ctx) => {
  ctx.render('index', { title: 'Hello World' });
});

在以上的例子中,将模板引擎设置为 EJS,然后使用 ctx.render() 方法来渲染名为 index.ejs 的视图文件,并传递 title 参数给模板文件。

中间件和插件

Moye 支持第三方中间件和插件来扩展其功能,这些中间件和插件可以用于路由前的请求处理、错误处理、缓存等等。

以下是一个使用中间件的例子:

// 使用中间件
app.use(async (ctx, next) => {
  console.log('Before request');
  await next();
  console.log('After request');
});

// 测试路由
app.get('/', (ctx) => {
  ctx.text('Hello World!');
});

在以上的例子中,定义了一个中间件函数,并使用 app.use() 方法来添加它,该中间件函数将会在每个路由请求前先执行,并输出 "Before request" 消息,之后才会执行路由处理器,最终输出 "After request" 消息。

以下是一个使用插件的例子:

const myPlugin = require('my-plugin');

// 使用插件
app.use(myPlugin());

// 测试路由
app.get('/', (ctx) => {
  ctx.text('Hello World!');
});

在以上的例子中,使用了名为 "my-plugin" 的插件,插件通过 app.use() 方法来添加,之后就可以在所有的路由中使用插件提供的功能。

结论

Moye 是一个相对稳定、灵活简单、可扩展性强的 Node.js 框架,它支持路由、控制器、模型、视图等基本组件,同时也支持第三方中间件和插件。如果你需要一个 Node.js 框架进行 Web 开发,Moye 可以作为你的选择之一。