(NOOB ALERT!刚刚从Microsoft过渡到MEAN)
任何人都有一个实体模式的例子,用于为公共和私人区域使用不同的路由/布局/模板和MEAN堆栈?我已经尝试过嵌套控制器,但这会带来路线问题。我也不想复制Express和客户端应用程序中的所有路由。在一个完美的场景中,某些相对文件夹应该被视为“私有”,而其他文件应该被视为“公共”,每个区域都有不同的布局(包装)。未经过身份验证的用户应限制在公共区域。
在非SPA / MS领域,一切都在服务器端维护。保护文件,预渲染等具有一定的舒适性。因此,我注意到使用Jade构建区域的诱惑可能比我应该的更多。即使在我写这篇文章时,我也开始觉得客户端看不到任何东西应该是服务器端,除了初始布局和索引,同时使用Node应用程序进行路由,数据封送和保护路由本身。
注意:目前使用Passport进行身份验证。
提前感谢您的时间和详细答案。
答案 0 :(得分:1)
快速思考:
通过获取具有特定文件夹的路线为您的部分服务。例如,您可以在partials文件夹中拥有一个public和protected文件夹。
-app
--partials
---public
---protected
然后在受保护的路由上添加身份验证中间件。
未受保护的:
app.get( '/partials/public/*', function(){ //send partial html here } )
受保护:
app.get( '/partials/protected/*', passport.authenticate, function(){ //same as above } )
最后,在你的角度应用程序中(希望你相应地设置你的templateURL),添加一个httpInterceptor来检查响应是否为401,如果是,则重定向到登录页面 - &gt ;在这里找到:Credits to Fredrick Nackstad。这是重要的片段
var interceptor = ['$location', '$q', function($location, $q) {
function success(response) {
return response;
}
function error(response) {
if(response.status === 401) {
$location.path('/login');
return $q.reject(response);
}
else {
return $q.reject(response);
}
}
return function(promise) {
return promise.then(success, error);
}
}];
$httpProvider.responseInterceptors.push(interceptor);
这将允许您让角度访问静态内容,同时仍然可以控制正在提供的内容。希望这很有用。