首页 > 解决方案 > CORS 不允许访问

问题描述

我已经查看了许多关于堆栈溢出的不同帖子并解决了问题,这些帖子有类似或相同问题的人,但是,似乎没有解决方案对我有用。

我不断收到错误 Access to XMLHttpRequest at 'http://localhost:3000/email?email=j' from origin 'https://mai...' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

我认为添加app.use(cors());会解决它,但问题仍然存在。

const path = require("path");
const express = require("express");
const bodyParser = require("body-parser");
const cors = require("cors");
const mongoose = require("mongoose");

var userController = require("./controllers/userController.js");
var emailController = require("./controllers/emailController.js");

var app = express();

app.use(cors());

mongoose.connect(
  "redactedForStackOverflow",
  { useUnifiedTopology: true, useNewUrlParser: true },
  err => {
    if (!err) console.log("MongoDB connection succeeded...");
    else
      console.log(
        "Error in DB connection : " + JSON.stringify(err, undefined, 2)
      );
  }
);

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));

app.use("/", express.static(path.join(__dirname, "angular")));

var port = 3000;

app.listen(process.env.PORT || port, () =>
  console.log("Server started at port : " + port)
);

app.use("/users", userController);
app.use("/email", emailController);
app.use((req, res, next) => {
  res.sendFile(path.join(__dirname, "angular", "index.html"));
});

module.exports = app;

编辑

添加服务文件

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/map';
import 'rxjs/operator/toPromise';

import { User } from './user.model';
import { UserComponent } from '../user/user.component';

@Injectable({
  providedIn: 'root'
})
export class UserService {
  selectedUser: User;
  users: User[];
  readonly baseURL = 'http://localhost:3000/users';
  codeSentIn;

  constructor(private http: HttpClient) {}

  postUser(users: User) {
    const codeOnItsWay = this.codeSentIn;
    this.resetCode();
    return this.http.post<any>(this.baseURL, {users, codeOnItsWay});
  }

  resetCode() {
    this.codeSentIn = '';
  }

  getUserList() {
    return this.http.get(this.baseURL);
  }

  getSpecificUser(id) {
    return this.http.get<any>(this.baseURL + '/' + id);
  }

  findPositionInLine(email) {
    return this.http.get<any>(this.baseURL + '/positionInLine/' + email);
  }

  getUserForLogin(email) {
    return this.http.get(this.baseURL + '/login/' + email);
  }

  sendEmailToCheck(emailToCheck) {
    return this.http.get('http://localhost:3000/email', { params: { email: emailToCheck }});
  }
}

标签: node.jscors

解决方案


更新:可能缺少 cors 选项:

 var corsOptions = {
 origin: 'localhost:3000',
 credentials : true
}

如此处所述:Node JS CORS 模块未设置 Access-Control-Allow-Credentials 标头

或者,删除 app.use(cors());

您可以在所有请求中手动添加标头:

app.use((req, res,next) => {
  res.set('Access-Control-Allow-Origin', '*');
  next();
});

只需在前面添加上面的代码块

app.use("/users", userController);
app.use("/email", emailController);
app.use((req, res, next) => {
  res.sendFile(path.join(__dirname, "angular", "index.html"));
});

推荐阅读