Node.js/快速应用程序体系结构



在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我不能使用这个技巧,因为当加载应用程序时,controolers 的构造函数只会被调用一次。

也许有一些方法可以在 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 类中,并在主应用程序文件中实例化它们,并将方法传递到路由定义中。

干杯

最新更新