Express Express重定向

时间:2017-04-24 23:16:35

标签: node.js express passport.js angular2-routing

我收到以下错误:

  

XMLHttpRequest无法加载http://localhost:4200/#/partners。请求   标题字段content-type不被允许   预检响应中的Access-Control-Allow-Headers。

server.js片段:

 app.use(function(req, res, next){
     res.header("Access-Control-Allow-Origin", "*");
     res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
     res.header('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
     res.header('Access-Control-Allow-Credentials', "true");
     next();
 });

 .
 .
 .

 app.post("/login", function(req, res, next) {
     passport.authenticate("local", function (err, user, info) {
       if (err) { return next(err); }
       if (!user){ return res.redirect(home_connection+'/#/'); }

       req.logIn(user, function(err){
         if(err){ return next(err); }
         return res.redirect(home_connection+"/#/partners");
       });
     })(req, res, next);
   }
 );

请记住,即使我设置了Access-Control-Allow-*标头后,此错误仍然存​​在。 Express要重定向到的路径是Angular2路由/#/partners

1 个答案:

答案 0 :(得分:0)

我使用Angular2重定向而不是节点服务器。

我只是将成功确认作为响应返回,而不是重定向到Node服务器中的路径。当Angular2收到成功确认后,它会将应用程序路由到正确的位置。

我将/login修改为以下内容:

app.post("/login", cors(),
  passport.authenticate("local"),
    function(req, res){
      res.status(200).json(req.user);
});

注意res.status(200).json(req.user);只返回用户对象。

调用/login的Angular2代码片段(请记住loginUserUserService中调用/login帖子的函数):

this.userService
  .loginUser(this.user.phone, this.third.value.code.replace(/ /g, ''))
  .then((resp) => {
    if(resp) this.router.navigate(['/partners']);
    else {
      this.third.setValue({"code":""});
      this.invalidCode = true;
    }
  }).catch((err) => {
    this.invalidCode = true;
  });

请注意this.router.navigate(['/partners']);处理重定向到/partners