为何 Nodejs 的 expressjs 默认不支持 controller action 这种常见的开发方式?
为何 Nodejs 的 expressjs 默认不支持 controller action 这种常见的开发方式?
为何 expressjs 默认不支持 controller action 这种常见的开发方式? 写了controller action之后,还需要去routes写很多路由,如下 app.get(’/login’, users.login) app.get(’/logout’, users.logout) …
这种设计方式 缺点:麻烦 优点:url配置更加灵活
还有其他什么优点呢?
为何 Node.js 的 ExpressJS 默认不支持 Controller Action 这种常见的开发方式?
为什么 ExpressJS 不默认支持 Controller Action?
ExpressJS 是一个轻量级的框架,它遵循“最小化原则”(Principle of least surprise),这意味着它只提供最核心的功能。Controller Action 模式是一种常见的软件架构模式,它将请求处理逻辑封装在控制器类中,并通过动作方法来响应不同的HTTP请求。
然而,在 ExpressJS 中,默认情况下并没有内置这种模式。这是因为:
- 灵活性:ExpressJS 提供了极大的灵活性,允许开发者自由地组织代码结构。你可以根据自己的需求选择是否使用 Controller Action 模式。
- 简洁性:ExpressJS 本身的设计目标就是简洁和高效。通过直接在路由中定义处理函数,可以避免引入额外的抽象层,从而减少代码复杂度。
示例代码
假设你有一个简单的用户登录和登出功能,如果不使用 Controller Action 模式,你的代码可能看起来像这样:
const express = require('express');
const app = express();
// 用户登录处理函数
function login(req, res) {
// 登录逻辑
res.send("Login successful");
}
// 用户登出处理函数
function logout(req, res) {
// 登出逻辑
res.send("Logout successful");
}
// 路由配置
app.get('/login', login);
app.get('/logout', logout);
app.listen(3000, () => console.log('Server is running on port 3000'));
缺点与优点
缺点:
- 需要在路由文件中重复定义每个请求处理函数。
- 当应用变得复杂时,路由文件可能会变得庞大且难以维护。
优点:
- 灵活性:你可以自由地将处理函数组织在任何地方,包括模块、类等。
- 简单性:对于小型项目,这种方式更直接,不需要引入额外的抽象层。
其他优点
- 可扩展性:ExpressJS 的设计使得你可以轻松地扩展功能,比如通过中间件或自定义路由处理逻辑。
- 社区支持:由于 ExpressJS 的广泛使用,有大量的第三方库和工具可以帮助你实现 Controller Action 模式,例如
express-controller
或express-generator
。
总之,虽然 ExpressJS 默认不支持 Controller Action 模式,但其灵活性和简洁性使其成为一种强大而高效的框架。如果你需要这种模式,可以通过编写自定义的中间件或使用第三方库来实现。
个人感觉,这样简单,灵活,轻量…
再说了,expressjs 不是mvc 框架…你提的这个问题…没提到点上…
你需要controller action 的模式,可以参考一些基于express 的mvc
Monorail.js – Ultra lightweight MVC framework for Node.js Locomotive – Powerful MVC framework for Node.js. Inspired by Ruby on Rails. CompoundJS – High-level MVC framework inspired by RoR
express的路由处理(app.router)是根据url来映射出controller和action的,提供一个简洁,灵活的高性能工具,提供丰富的api和中间件全局的处理,这个和mvc框架还是有点区别
我觉得 express这种通过url映射controller的方式和java的spring mvc3.x的思路是一样的,这种方式能够提供灵活的处理方式 action的方式类似于struts。
java领域里这两种方式也是存在争议,设计思路不一样不能说那种不好,不过我感觉通过路由控制更灵活也更贴近RESTful
Express.js 是一个轻量级的 Web 框架,它默认不内置控制器(Controller)的概念。这是因为 Express.js 旨在提供最小化的核心功能,使得开发者可以根据自己的需求来组织代码结构。虽然默认情况下没有内置 Controller 的概念,但这并不意味着不能使用 Controller 来管理逻辑。
为什么 Express.js 不内置 Controller?
- 灵活性:Express.js 的设计理念是灵活且可扩展的。开发者可以自由选择如何组织代码结构。
- 最小化核心功能:内置 Controller 可能会增加不必要的复杂性,对于简单的应用来说可能会显得多余。
示例代码
尽管 Express.js 不内置 Controller,但你可以自己实现类似的功能。以下是一个简单的示例:
// 定义控制器
const userController = {
login: (req, res) => {
res.send('Login');
},
logout: (req, res) => {
res.send('Logout');
}
};
// 在路由中使用控制器
const express = require('express');
const app = express();
app.get('/login', userController.login);
app.get('/logout', userController.logout);
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
优点
- 模块化:将业务逻辑放在控制器中,可以更好地组织代码。
- 可维护性:分离关注点,使得代码更容易维护和测试。
- 复用性:控制器中的逻辑可以被多个路由复用。
缺点
- 配置繁琐:需要手动将路由映射到控制器方法上。
- 灵活性降低:虽然减少了配置的繁琐,但一定程度上也牺牲了 URL 配置的灵活性。
总结
虽然 Express.js 没有内置 Controller,但通过上述方式可以轻松实现类似的逻辑分离,从而提升代码的可维护性和复用性。