node.js - Express res.render 不适用于 Angular 路由

标签 node.js authentication express angular-routing

我有一个基于 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) 生成 undefinedreq.user==undefined 给出 trueif 中的 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/

相关文章:

ios - 我们可以在 iPhone 上以编程方式通过 SSL 实现 HTTP 摘要代理吗?

node.js - 为什么以及如何将 secret 放入 Node.js 的环境变量中?

java - Java String getBytes ISO_8859_1 的 Node.js 等效项

javascript - 从 React 组件中的脚本访问变量

scala - Akka HTTP AuthenticationFailedRejection 原因

authentication - Drools KnowledgeAgent 和 Guvnor : authentication fails

javascript - Node JS 将可能未定义的 JavaScript 对象传递给 pug 模板

javascript - 显示来自 mongodb 的所有数据并在 doT.js 模板引擎中渲染它

node.js - 当我启动新进程时,NodeJS fork 进程会减慢所有其他 fork 进程的速度

node.js - 强制使用网址中的查询参数格式