使用app.use(cors())时,“请求中没有'Access-Control-Allow-Origin'标头”

时间:2019-03-08 05:15:07

标签: node.js express cors

我正在尝试通过在我的代码中添加下面的cors()来在服务器端设置“ Access-Control-Allow-Origin”,但它根本无法正常工作并返回此错误:“否'Access -Control-Allow-Origin'标头出现在前端提取的请求中!

出什么问题了?我在做什么错?!

var express = require("express");
var bodyParser = require("body-parser");
var expressValidator = require("express-validator");
var cors = require("cors");
var app = express();
var server = require('http').createServer(app);
var mongoose = require("mongoose");
var path = require("path");
var config = require("./config");

app.use(cors());
// app.options('*', cors()); // I also tested this one

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


var port = process.env.PORT || 1111;

var helmet = require('helmet')
app.use(helmet())
const frameguard = require('frameguard')
app.use(frameguard())
const xssFilter = require('x-xss-protection')
app.use(xssFilter())
const ienoopen = require('ienoopen')
app.use(ienoopen())
const nosniff = require('dont-sniff-mimetype')
app.use(nosniff())
app.disable('x-powered-by')

const db = require('./config').mongoURI

app.use("/public", express.static(path.join(__dirname, "public")));
mongoose.Promise = global.Promise;
mongoose.connect(db, { useNewUrlParser: true })

app.set("superSecret", config.secret);
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());


app.use(require('./controller/v1'));


server.listen(port, function () {
    console.log("⚙️ ✅ Server is running on port 1111 ✅ ⚙️");
});

3 个答案:

答案 0 :(得分:0)

也许是拼写错误,不是您的主要问题的答案,但是您正在配置bodyParser 2次+头盔已经具有抗xss和mime类型的嗅探技术,并且该模块只会降低性能速度(当然,如果您信任头盔,否则您可以删除该模块)

答案 1 :(得分:0)

我在代码中找到了错误。这只是我的配置文件中有关服务器URL的一个错误。但是我想知道为什么它会引发与Access-Control-Allow-Origin相关的错误!

答案 2 :(得分:-1)

需要进行CORS飞行前请求(OPTIONS调用)的Content-Type是除以下内容之外的任何Content-Type:

  1. application / x-www-form-urlencoded
  2. multipart / form-data
  3. 文本/纯文本

在这里,我们需要添加访问控制标头。

下面的代码将捕获方法类型为OPTIONS的所有请求,并发送回access-control-headers。

在服务器/主目录/索引js文件上

const express = require('express');
const app = express();

app.all('*', function(req, res, next) {
  res.header('Access-Control-Allow-Origin', '*');
  res.header('Access-Control-Allow-Credentials', 'true');
  res.header('Access-Control-Allow-Methods', 'PUT, GET, POST, DELETE, OPTIONS');
  res.header(
    'Access-Control-Allow-Headers',
    'Origin, X-Requested-With, Content-Type, Accept, Authorization'
  );
  next();
});

该代码根据要求接受来自所有来源的CORS。