Node.js Express res.render不使用角度布线
我有一个基于node.js、express、angular(带路线)和mongo的web应用程序。身份验证通过Passport.js处理 我的角度视图通过http请求与服务器交互。假设我发送类型为的请求:Node.js Express res.render不使用角度布线,node.js,authentication,express,angular-routing,Node.js,Authentication,Express,Angular Routing,我有一个基于node.js、express、angular(带路线)和mongo的web应用程序。身份验证通过Passport.js处理 我的角度视图通过http请求与服务器交互。假设我发送类型为的请求: $http.get('/api/getMyData').success(function(data) {})... 在服务器上,我有: app.get('/api/getMyData',function(req, res) { if(!req.user){ // if th
$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.'});
使用此代码,如果会话已过期,我希望用户被重定向到登录页面
现在,这不起作用,我没有被重定向到登录。即使我有console.log(req.user)
productingundefined
和req.user==undefined
givingtrue
,如果中的res.render
不起作用。如果我尝试使用res.redirect('login')代码>
我收到一个404错误,表示/api/login
不存在
我真的迷路了,任何帮助都将不胜感激。您的$http.get()
正在从res.render()
取回内容。
您可以通过添加console.log(数据)看到这一点$http.get().success()中的code>
如果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
});
}
棱角的
$http.get('/api/getMyData').success(function(data) {
// Do something
}).error(function(data, status) {
// Handle the error
});
注意:这是未经测试,但它会给你一个大致的想法。可能会有一个更优雅的解决方案。我实现了一些类似于@Jordonias建议的东西。
我从服务器获取用户(null
如果会话过期),
如果用户是null
我使用$window.location.href=“/login”
以注销用户。
感谢@Jordonias。欢迎使用更好的替代方案。您不是指res.render吗?(您的标题)标题已编辑,谢谢。谢谢您的评论。我认为这可能是一个解决办法。假设我得到了一个状态为:error的json,那么我如何从angular重定向到login.ejs这样的登录页面,并显示一条特定的消息(我在原始帖子的if中想做的事情)?无论如何,我仍然不明白为什么res.render在这种情况下不起作用代码>然后$scope.$apply()代码>