«Невозможно установить заголовки после их отправки». ошибка в узле при получении данных через угловой - PullRequest
0 голосов
/ 06 июля 2018

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

В моей форме у меня есть двусторонняя привязка

first name <input type="text" id="firstname" [(ngModel)]="firstname" name="firstname" >

в компоненте у меня

  ngOnInit() {
    this.profileService.getProfile(this.user_id).subscribe((data) =>{
      if(data.success){
        this.firstname = data.firstname;
    })
  }

Итак, как только страница загружается, я заполняю форму, и из-за двусторонней привязки форма никогда не становится пустой (если пользователь не удаляет все намеренно, в этом случае угловые проверки на наличие пустых полей и не Отправить. ). Таким образом, пользователь может отправить его в любое время, когда захочет.

В сервисе функция getProfile равна

  createAuthorizationHeader(headers: Headers) {
    headers.append('Authorization', this.token);
    headers.append('Content-Type','application/json');
  }

  getProfile(user_id){
    let headers = new Headers();
    this.createAuthorizationHeader(headers);
    return this.http.get('http://localhost:3000/profile/'+user_id, {headers:headers}).pipe(map(res => res.json()));
  }

Моя проблема в том, что node.js говорит в консоли Error: Can't set headers after they are sent. каждый раз, когда я обновляюсь.

Это из-за моего кода и возможности постоянной отправки в любое время? Как я могу это исправить? Я должен иметь возможность устанавливать одни и те же заголовки один раз и использовать их при каждом будущем вызове getProfile. Я пробовал что-то вроде

  createAuthorizationHeader(headers: Headers) {
    headers.append('Authorization', this.token);
    headers.append('Content-Type','application/json');
  }
    let headers = new Headers();
    this.createAuthorizationHeader(headers);

  getProfile(user_id){
    return this.http.get('http://localhost:3000/profile/'+user_id, {headers:headers}).pipe(map(res => res.json()));
  }

но тогда угловой говорит 'return' outside of function о getProfile.

Маленькая помощь здесь?

Спасибо

EDIT

Из точки узла, это маршрут, по которому я проложил угловой

router.get('/:userid', validate.required(), (req, res)=>{ 
  user.query('select firstname from user WHERE id = $1', [req.params.userid])
  .then((resolved)=>{
      res.json({success:true, data:data });    
   })
   .catch((error)=>{
     res.json({success:false, msg:errorvalue});
   });
});

и это промежуточное ПО validate 1040 *

  exports.required = ()=>{
    return (req, res,next)=>{
      const token = req.get('Authorization');
      const key = config.key;
      jwt.verify(token, key,function(err, decoded) {
        if (err){res.json({redirect:true});}
        if (decoded){
          let dateNow = Math.floor(Date.now() / 1000);
          if (dateNow > decoded.exp){res.json({redirect:true});}
          next();
        }
        else {res.json({redirect:true});}
      });
    }
  }

1 Ответ

0 голосов
/ 06 июля 2018

точно так же, как ошибка говорит: вы устанавливаете заголовки, но сервер уже отправил ответ. Вы должны установить заголовки ранее в цепочке вызовов.

, если хотите, посмотрите мой репо здесь:

https://github.com/Robbie106gti/nc-catalog/blob/master/functions/auth/login.js

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...