Node.js/Express 应用架构

标签 node.js express

在 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/

相关文章:

javascript - ExpressJS 中的错误处理

node.js - 通过 LESS 在 Twitter Bootstrap 中集成 Font Squirrel 生成的字体

node.js - 无法在 Ubuntu 中安装 Grunt

node.js - 在 pg-promise 中返回

node.js - hogan.js 如何调试变量

javascript - 如何扩展 GraphQL 调用的上下文对象?

javascript - 为什么我的 Firebase 请求返回 500(内部服务器错误)?

javascript - 使用 .pipe() 时出现 node.js fs.createReadStream 错误

javascript - 如何限制用户访问 ExpressJS/NodeJS 中的静态 html 文件?

node.js - 使用 mongoose 更新 mongodb 中的第二级数组返回意外标记 "."