1

在 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 并确保控制器对非管理员用户不可用。

但是在 Node.js 中我不能使用这个技巧,因为当应用程序被加载时,控制器的构造函数只会被调用一次。

也许有一些方法可以在 Node.js 中实现这一点?

4

1 回答 1

-2

您可以使用 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 类中,并在您的主应用程序文件中实例化它们,并将方法传递给路由定义。

干杯

于 2013-11-11T19:37:51.460 回答