node.js - http.get 方法在 postman 中工作正常,但在 Angular 2 中返回空响应

标签 node.js angular angular2-services passport.js

getProfile(){
    let headers = new Headers(); 
    this.loadToken();
    headers.append('Content-Type','application/json');
    headers.append('Authorization',this.authToken);
    console.log(this.authToken);
    return this.http.get('http://localhost:3000/users/profile', {headers: headers}).map( (res : Response )=> {
      console.log(res.json());
      res.json();
  });
  }

  storeUserData(token , user){
    localStorage.setItem('id_token'  , token);
    localStorage.setItem('user', JSON.stringify(user));
    this.authToken = token;
    this.user = user;
  }

  loadToken(){
    const token = localStorage.getItem('id_token');
    console.log(token);
    this.authToken = token;
  }

上面是通过 loadToken() 方法生成存储在本地存储中的 token 来配置用户输入配置文件的代码。

运行控制台时出现错误 获取http://localhost:3000/users/profile净::ERR_EMPTY_RESPONSE 响应 {_body: ProgressEvent, status: 0, ok: false, statusText: "", headers: Headers, ...}

下面分别是passport.js和users.js的代码:

var JwtStrategy = require('passport-jwt').Strategy,
    ExtractJwt = require('passport-jwt').ExtractJwt;

// const passport = require('passport');
const User = require('../models/user');
const jwt = require('jsonwebtoken');
const config = require('../config/database');


module.exports = function(passport){
    var opts = {};
    console.log("hello");
    opts.jwtFromRequest = ExtractJwt.fromAuthHeaderWithScheme('jwt');
    // opts.jwtFromRequest = ExtractJwt.fromAuthHeaderAsBearerToken();
    opts.secretOrKey = config.secret;
    console.log("hello");
    passport.use(new JwtStrategy(opts, function(jwt_payload, done) {
        console.log("hello");
        console.log(jwt_payload);
        console.log(jwt_payload._doc);
        console.log(jwt_payload.data._id);
            User.findOne({_id: jwt_payload.data._id}, function(err, user) {
                if(err){
                    // console.log("test1");
                    return done(err,false);
                }
                if(user){
                    // console.log("test2");
                    return done(null , user);
                }
                else{
                    // console.log("test3");
                    return done(null, false);
                }
            });
    }));
}
router.get('/profile',function(req,res,next){
    passport.authenticate('jwt',{session:false} , function(err,user,info){
        if(err){ return next(err);}
        if(!user){
            console.log('User not found 1! ');
            // return res.redirect('/register');
        }
        else{
            // console.log(user);
                    res.json({
                                  success: true,
                                  msg: 'You have entered profile successfully !',
                                  user:{
                                    id:user._id,
                                    name:user.name,
                                    username:user.username,
                                    email:user.email,
                                    contact:user.contact
                                }
                                });

        }

    })(req,res,next);
});

最佳答案

尝试将 getProfile()return 更改为此,

return this.http.get('http://localhost:3000/users/profile', {headers: headers}).map( (res : Response )=> {
  console.log(res.json());
  return res.json();
});

请参阅在 res.json(); 之前添加的 return。看看这是否有帮助(或改变您的回复中的任何内容)。

关于node.js - http.get 方法在 postman 中工作正常,但在 Angular 2 中返回空响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46255046/

相关文章:

node.js - 如何在企业 Web 代理后面设置 Node.js 和 Npm

angular - @angular/路由器 3.0.0-alpha.3 : How to migrate OnActivate

Angular2 子模块的 forChild() 路由覆盖根路由

javascript - 如何在返回值之前等待其他事件完成?

angular 2 服务订阅仅在第二次单击带有 routerLink(s) 的组件后更新

angular - 如何在 Angular 2/4 的不同 Json 数组中使用相同的模型名称

node.js - 检查文档中的字段

node.js - 如何将coffescript与AMD加载器和 Node 服务器一起使用?

javascript - 在 Node 的请求 hapijs 中获取客户端 ip 地址

node.js - 在同一个 Azure Web 应用程序中部署 Angular 6 应用程序和 Web API