如何从ExpressJS API代码中重定向到特定路由?

时间:2018-04-03 10:04:59

标签: node.js angular express routing

我希望能够在没有有效登录时将我的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响应的组件有关。

实现这一目标的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

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

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

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

$location.url('/login');

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

  

AngularJs route authentication

答案 1 :(得分:0)

如果你使用角度,那么你需要设法在有角度的一侧进行路线。您可以发送某种HTTP代码或响应,告诉您的角度应用程序请求未经授权。

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

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