Express res.render不能使用Angular路由
我有一个基于node.js,express,angular(与路由)和mongo的web应用程序。 身份validation通过Passport.js进行处理。
我的angular度视图通过http请求与服务器交互。 说我发送types的请求:
$http.get('/api/getMyData').success(function(data) {})...
在服务器上我有:
app.get('/api/getMyData',function(req, res) { if(!req.user){ // if the session expired res.render('login.ejs',{message:'Session expired. Please login again.'});
有了这个代码,我想用户被redirect到login页面,如果会话已经过期。
现在,这不起作用,我没有redirectlogin。 即使我有console.log(req.user)
产生undefined
和req.user==undefined
给予true
, res.render
中的res.render
不工作。 如果我尝试res.redirect('login');
我得到一个404错误,说/api/login
不存在。
我真的很迷茫,任何帮助将不胜感激。
你的$http.get()
从res.render()
获取内容。 你可以通过添加console.log(data);
来看到这个console.log(data);
在$http.get().success()
你需要添加一些逻辑到你的客户端redirect,如果有一个错误的API。
就像是:
server.js
app.get('/api/getMyData', function(req, res) { if(!req.user) { res.status(401); return res.json({ status: 'error', message: 'Unauthorized' }); } return res.json({ status: 'success', // Stuff }); }
angular
$http.get('/api/getMyData').success(function(data) { // Do something }).error(function(data, status) { // Handle the error });
注:这是未经testing,但它会给你一个大致的想法。 可能有一个更优雅的解决scheme。
我实现了类似于@Jordoniasbuild议的东西。 我从服务器获取用户(如果会话过期,则为null
),如果用户为null
,则使用$window.location.href="/login";
注销用户。 感谢@Jordonias。 欢迎更好的替代品。
- nodejs HTTP摘要authentication不起作用
- 如何在node.js中实现loginauthentication
- Firebase child.once在auth.signInWithEmailAndPasswordcallback中超时不一致
- 如何在单个快递服务器文件中使用两个单独的护照实例
- 麻烦authentication
- 使用passport.js在node.js中进行身份validation后,redirect到上一页
- InternalOAuthError:无法获取访问令牌
- 在NodeJS中使用REST APIauthentication困惑
- 如果有基本授权,如何在Node.js中使用http.client