【问题标题】:How to redirect to a specific route from within ExpressJS API code?如何从 ExpressJS API 代码中重定向到特定路由?
【发布时间】:2018-09-12 14:50:52
【问题描述】:

我希望能够在没有有效登录时将我的 MEAN 应用重定向到登录页面。

我有一个组件,它在 ngOninit() 上调用 API 路由。

API 路由如下所示:

router.get("/route", isLoggedIn, (req, res) => {
});

isLoggedIn 在哪里:

function isLoggedIn(req, res, next) {
  if (req.isAuthenticated()) {
    return next();
  } else {
    console.log("Not Logged in");
    res.redirect("http://localhost:3000/login");
  }
}

res.redirect("http://localhost:3000/login")被执行时,它会在控制台中抛出一个错误:“模板解析错误”。我猜这与调用 API 等待 API 响应的组件有关。

最好的方法是什么?

【问题讨论】:

    标签: node.js angular express routing


    【解决方案1】:

    在您的 MEAN 应用程序中处理它,将用户从 Angular 重定向到登录页面,并从 API 返回 JSON 响应。

    res.status(401).json({error: "Unauthorized Access"});
    

    在您角度方面,在此 API 调用的响应中检查您是否收到此错误,然后将用户重定向到登录页面。你可以通过使用角度服务来做到这一点。 $location

    $location.url('/login');
    

    对于检查每条路由上的身份验证的通用解决方案,您应该使用http interceptor。请看以下stackoverflow问题:

    AngularJs route authentication

    【讨论】:

    • 所以我应该对所有电话都这样做吗?有一些通用的方法吗?而不是在所有调用中都写这个检查?
    • @NimishDavidMathew 我已经更新了我的答案,请看一下,希望对您有所帮助。
    • 是的。谢谢!
    • @NimishDavidMathew 欢迎您!
    【解决方案2】:

    如果您使用的是角度,那么您需要设法在角度侧进行布线。您可以发送某种 HTTP 代码或响应来告诉您的 Angular 应用该请求未经授权。

    您可以编写通用包装器,将请求发送到您的节点服务器并检查错误。您可以根据您正在使用的逻辑和库编写通用函数,但就是这样。

    function makeRequest(url,..., callback) {
      request(...).then(response => {
        if(resp.status === 401) $location.url('/login');
        else callback(resp.data)
      })
    }
    

    【讨论】:

    • 感谢您的帮助!
    猜你喜欢
    • 2022-11-02
    • 1970-01-01
    • 2015-02-26
    • 1970-01-01
    • 1970-01-01
    • 2021-12-09
    • 2021-11-07
    • 2016-03-30
    • 1970-01-01
    相关资源
    最近更新 更多