在Angular 7客户端获取Express应用程序的响应标头

问题描述 投票:0回答:1

我一直在尝试从Angular 7客户端代码中的NodeJS应用程序访问http响应头,但我无法检索它。我尝试过在Stack Overflow上找到的每个解决方案。我仍然在浏览器中继续得到一个空标题。但它在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);
            });

    }

}
node.js angular express cors mean-stack
1个回答
0
投票

您是如何尝试在客户端访问标题的?你的例子中的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);
});
© www.soinside.com 2019 - 2024. All rights reserved.