2015-01-08 2 views
0

У меня есть две схемы, одна для пользователя и один для системы дружбы (следовать системе)Ошибка: не удается установить заголовок после отправки

module.exports = mongoose.model('User', { 

email: { 
    type: String, 
    unique: true, 
    lowercase: true 
}, 

password:String, 

profile: { 
    fullname: String, 
    gender: String, 
    role: {type: String, default: 'Autorizado'}, 
    country: String }, 
}); 

и это для друга системы

module.exports = mongoose.model('Friendship', { 
    follower: String, 
    followed: String 
}); 

Я использую паспорт для авторизации моих пользователей ... проблема в том, что я хочу, чтобы я загружал информацию пользователя и информацию друга, связанную с пользователем, глобально, используя res.locals. Я делаю это, используя 2 функции в пути входа в систему ... .

router.post('/login', userController.postLogin,friendController.getFollow); 

это моя postlogin функция

exports.postLogin = function(req, res, next) { 
    passport.authenticate('local', function(err, user, info) { 
    if (err) return next(err); 
    if (!user) { 
     req.flash('errors', { msg: info.message }); 
     return res.redirect('/login'); 
    } 
    req.logIn(user, function(err) { 
     if (err) return next(err); 
     req.flash('success', { msg: 'Success! You are logged in.' }); 
     res.redirect('/'); 
    }); 
    }) 
    (req, res, next); 
}; 

Когда я пытаюсь выполнить этот код все идет нормально, но когда я войти я получаю ошибку заголовка, пожалуйста, как я могу решить этот или другой способ, чтобы получить пользователь и следить за информацией и использовать ее во всех представлениях ?.

EDIT 3: работает только в следующих двух видах

Одна страница пользователя

<%= info.profile.fullname %> 
<br> 
<%= info.email %> 
<br> 
<%= info.profile.country %> 
<br> 
<%= user.follow %> 
<br> 
<% if(user && (user._id != info.id)){ %> 
<br> 
<form action="/follow/<%= info._id %>" method="post"> 
<button type="submit">Follow</button></form> 
<%}%> 
<br> 
<a href="/users">atras</a> 

Список зарегистрированного пользователя

<%if (user) {%> 
<h1>Hola <%= user.profile.fullname %> </h1> 
<%}%> 
<br> 
<% users.forEach(function (user) {%> 
<a href="https://stackoverflow.com/users/<%= user._id %>"><p><%= user.profile.fullname %></p></a> 
<%});%> 
<a href="/">Home</a> 

Это мой индекс и в этом плане user.follow не работает

<%if (!user) {%> 
<a href="/signup">sign up</a> 
<br> 
<a href="/login">login</a> 
<%} else { %> 
<h1>Hola <%= user.profile.fullname %> Eres lo Maximo</h1> 

<a href="/profile">perfil</a> 
<br> 
<a href="/logout">Logout</a> 
<br> 
<%}%> 
<br> 

Lista de Usuarios

EDIT 4: новый deserializeUser конфигурации.

passport.deserializeUser(function(id, done) { 
User.findById(id, function(err, user) { 

FF.find({ follower:id }, function(err, follow) { 
user.follow = follow; 
}); 
done(err, user); 
}); 
}); 

EDIT 5: Это мой маршрут Код

router.get('/', function(req, res) { 
res.render('index'); 
}); 

router.get('/login', userController.getLogin); 
router.post('/login', userController.postLogin); 
router.get('/logout', userController.logout); 
router.get('/signup', userController.getSignup); 
router.post('/signup', userController.postSignup); 
router.get('/profile', passportConf.isAuthenticated, userController.getAccount); 
router.post('/profile', passportConf.isAuthenticated, userController.postUpdateProfile); 

ответ

0

Вы были friendController.getFollow, которые бы работали только по просьбе '/login' страницы, поэтому follow объект не был бы Постоянно доступен на других маршрутах. Чтобы исправить это, вам нужно было поместить весь этот код внутри функции passport.deserializeUser.

Внутри функции passport.deserializeUser можно назвать только done один раз, так что вы должны были поставить логику, чтобы найти follow внутри обратного вызова User.find, так что вы можете прикрепить к followuser.

Это позволило удалить friendController.getFollow со своего '/login' маршрутка, по моему мнению, послужило причиной вашей ошибки.

+0

мой друг, у меня есть один вопрос, я могу использовать user.follow в 2 представлениях, можете ли вы помочь мне с этой проблемой?. Я обновил код –

+0

Конечно, если смогу.Задайте это как еще один вопрос и опишите его как можно подробнее. Отдельные независимые вопросы помогают другим пользователям и будущим посетителям. – laggingreflex

+0

oh ok, я обновил это, позвольте мне создать еще один вопрос –

Смежные вопросы