我有一个基于 Node.js、express、Angular(带路线)和 mongo 的 Web 应用程序。身份验证通过 Passport.js 处理。
我的角度 View 通过 http 请求与服务器交互。假设我发送了以下类型的请求:
$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.'});
使用此代码,如果 session 已过期,我希望将用户重定向到登录页面。
现在,这不起作用,我没有被重定向到登录。即使我有 console.log(req.user)
生成 undefined
且 req.user==undefined
给出 true
,if
中的 res.render
也不起作用。如果我尝试使用 res.redirect('login');
我收到 404 错误,指出 /api/login
不存在。
我真的对此迷失了方向,任何帮助将不胜感激。
最佳答案
您的$http.get()
正在从res.render()
获取内容。
您可以通过在 $http.get().success()
中添加 console.log(data);
来查看这一点
您需要向客户端添加一些逻辑,以便在 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
});
注意:这尚未经过测试,但它会给您一个总体思路。可能有更优雅的解决方案。
关于node.js - Express res.render 不适用于 Angular 路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25556670/