http.get方法在postman中正常工作但在角度2中返回null响应

时间:2017-09-16 14:38:52

标签: 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()方法生成存储在本地存储中的令牌来输入配置文件的代码。

运行控制台错误时出现 获取http://localhost:3000/users/profile net :: 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);
});

1 个答案:

答案 0 :(得分:1)

尝试将return的{​​{1}}更改为此

getProfile()

return this.http.get('http://localhost:3000/users/profile', {headers: headers}).map( (res : Response )=> { console.log(res.json()); return res.json(); }); 之前查看已添加的return。看看这是否有帮助(或改变了你的回复中的任何内容)。