Получить заголовок ответа приложения Express в клиенте Angular 7 - PullRequest
0 голосов
/ 14 марта 2019

Я пытался получить доступ к заголовку ответа http из приложения NodeJS в клиентском коде Angular 7, но не могу его получить.Я испробовал каждое решение, которое нашел в переполнении стека.Я все еще продолжаю получать пустой заголовок обратно в браузере.Но на Postman он работает нормально.

Я прилагаю журнал консоли браузера ниже:

headers: HttpHeaders
  lazyInit: ƒ ()
  lazyUpdate: null
  normalizedNames: Map(0)
    size: 0
    __proto__: Map
    [[Entries]]: Array(0)
      length: 0

Код на стороне сервера:

app.js

const express = require('express');
const bodyParser = require('body-parser');
const cors = require('cors');

const route = require('./routes/route');
const { mongoose } = require('./db/mongoose');

const app = express();

app.use(bodyParser.json());

app.use(cors({
    'allowedHeaders': ['sessionId', 'Content-Type', 'x-auth', 'Authorization'],
    'exposedHeaders': ['sessionId', 'x-auth', 'Authorization'],
    'origin': '*',
    'methods': 'GET,HEAD,PUT,PATCH,POST,DELETE,OPTIONS',
    'preflightContinue': false
}));

// app.options('*', cors());

app.use(route);

app.listen(3000);

controller.js

exports.signupUser = (req, res, next) => {

    let user = new UserModel({
        email: req.body.email,
        password: req.body.password
    });

    user.save().then((user) => {
        return user.generateAuthToken();
    }).then((token) => {
        res.header({
            'Access-Control-Allow-Headers': 'Origin, X-Requested-With, Content-Type, Accept, Authorization',
            'Access-Control-Expose-Headers': 'Authorization',
            'Access-Control-Allow-Methods': 'GET,PUT,POST,DELETE,PATCH,OPTIONS',
            'Access-Control-Allow-Credentials': 'true',
            'x-auth': token
        }).send(user);
    }).catch((err) => {
        res.status(400).send(err);
    });

};

угловой 7 код:

auth.service.ts

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';

@Injectable()
export class AuthService {

    token: string;

    constructor(private http: HttpClient) { }

    signup(email: string, password: string) {

        this.http
            .post('http://localhost:3000/signup', { email, password }, {observe: 'response'})
            .subscribe((response) => {
                console.log(response);
            });

    }

}

1 Ответ

0 голосов
/ 14 марта 2019

Как вы пытаетесь получить доступ к заголовку на стороне клиента? Response.headers из вашего примера является экземпляром HttpHeaders . Заголовки не отображаются как свойства самого объекта заголовков, но вы можете получить к ним доступ следующим образом:

this.http
   .post('http://localhost:3000/signup', { email, password }, {observe: 'response'})
   .subscribe((response) => {
       let contentTypeHeader = response.headers.get("content-type");
       console.log(contentTypeHeader);
});
...