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/