【问题标题】:http.get method working fine in postman but returning null response in angular 2http.get 方法在邮递员中工作正常,但在角度 2 中返回空响应
【发布时间】:2018-02-25 13:25:42
【问题描述】:
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/profilenet::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);
});

【问题讨论】:

  • 它给出了一个未经授权的错误

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


【解决方案1】:

尝试将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。看看这是否有帮助(或改变了您的回复)。

【讨论】:

  • 对不起,它没有改变任何东西,也许是其他原因导致了错误
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-12
  • 2016-09-06
  • 2018-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-14
相关资源
最近更新 更多