gpt4 book ai didi

Node.js/Express 应用架构

转载 作者:太空宇宙 更新时间:2023-11-04 02:48:29 25 4
gpt4 key购买 nike

在 PHP 应用程序中,我能够创建类层次结构

class UserController  extends Controller {
public function __constructor(){
//..
}
}

class LoggedUserController extends UserController {
protected $_loggedUser;
public function __constructor(){
if( empty($_SESSION['user']) ){
die('Access denied');
}
else{
$this->_loggedUser = $_SESSION['user'];
}
}
}

class MessagesController extends LoggedUserController {
public function action_get_all(){
// here I can use $this->_loggedUser and be sure that it is not empty
// Something like that:
$messages = ORM::factory('messages')->where('user_id', '=', $this->_loggedUser->id)->find_all();
}
}

以同样的方式,我可以创建 AdminUserController 类,并确保该 Controller 不可用于非管理员用户。

但在 Node.js 中,我无法使用此技巧,因为在加载应用程序时, Controller 的构造函数只会被调用一次。

也许有某种方法可以在 Node.js 中实现这一目标?

最佳答案

您可以使用 CoffeeScript 在 NodeJS 中实现类似的功能。与使用纯 JavaScript 相比,CoffeeScript 允许您以更简洁的方式创建类和其他构造。尽管存在学习曲线,但可能是值得的。

就问题的第二部分而言,您将以不同的方式做同样的事情。您可以使用请求链来使用 ExpressJS 来实现此目的。例如,考虑以下内容(常规 JavaScript 方法):

app.requiresAdminUser = function(req, res, next) {
if (req.session.user.role.indexOf('admin') > -1) return next();
return res.send("Not Authorized", 401);
}

app.get('/site/public/page', function(req, res) {
res.render('mypage');
});

app.get('/site/admin/secure', app.requiresAdminUser, function(req, res) {
res.render('mysecurepage');
});

我相信代码是不言自明的。如果有任何部分不清楚,请回复您的问题。

CoffeeScript可以让上面的代码看起来更干净。此外,当您进入一个完整的应用程序时,您可以将此类代码放入 CoffeeScript 类中,并在主应用程序文件中实例化它们,并将方法传递到路由定义中。

干杯

关于Node.js/Express 应用架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19913357/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com