【问题标题】:Cors "No 'Access-Control-Allow-Origin' header present" IssueCors“不存在'Access-Control-Allow-Origin'标头”问题
【发布时间】:2021-10-20 12:37:14
【问题描述】:

我正在尝试解决我的 express 服务器上发生的这个 CORS 错误。我已经实现了 npm CORS 包以通过对所有来源启用 CORS 请求来解决该问题,但是我没有成功并且一直面临这个错误:

CORS Error

Github Repository

App.js

const express = require("express");
const app = express();
const bodyParser = require("body-parser");
const cors = require("cors");
const queries = require("./queries");
const port = process.env.PORT || 3001;

app.use(express.static("public"));
app.use(cors());
app.use(bodyParser.json());

app.get("/questions", (req, res) => {
    queries.getAllQuestions().then((questions) => res.send(questions));
});

app.get("/questions/:id", (req, res) => {
    queries
        .getQuestionById(req.params.id)
        .then((question) => res.send(question));
});

app.get("/answers", (req, res) => {
    queries.getAllAnswers().then((answers) => res.send(answers));
});

app.get("/answers/:id", (req, res) => {
    queries.getAnswerById(req.params.id).then((answer) => res.send(answer));
});

app.get("/users", (req, res) => {
    queries.getAllUsers().then((users) => res.send(users));
});

app.get("/users/:id", (req, res) => {
    queries.getUserById(req.params.id).then((user) => res.send(user));
});

app.post("/questions", (req, res) => {
    queries
        .createQuestion(req.body)
        .then((newQuestion) => res.send(newQuestion));
});

app.post("/answers", (req, res) => {
    queries.createAnswer(req.body).then((newAnswer) => res.send(newAnswer));
});

app.delete("/questions/:id", (req, res) => {
    queries.deleteQuestion(req.params.id).then(res.sendStatus(204));
});

app.delete("/answers/:id", (req, res) => {
    queries.deleteAnswer(req.params.id).then(res.sendStatus(204));
});

app.delete("/users/:id", (req, res) => {
    queries.deleteUser(req.params.id).then(res.sendStatus(204));
});

app.patch("/questions/:id/upvote", (req, res) => {
    queries
        .patchUpvoteQuestion(req.params.id)
        .then((newVoteCount) => res.send("post"));
});

app.patch("/questions/:id/downvote", (req, res) => {
    queries
        .patchDownvoteQuestion(req.params.id)
        .then((newVoteCount) => res.send("post"));
});

app.patch("/answers/:id/upvote", (req, res) => {
    queries
        .patchUpvoteAnswer(req.params.id)
        .then((newVoteCount) => res.send("it worked"));
});

app.patch("/answers/:id/downvote", (req, res) => {
    queries
        .patchDownvoteAnswer(req.params.id)
        .then((newVoteCount) => res.send("it worked"));
});

app.listen(port, () => {
    console.log(`listening on ${port}`);
});

我已经试过了:

app.use(cors());

和

app.use(cors({ origin: true }));

和

app.use(cors({ origin: "*" }));

【问题讨论】:

    标签: javascript node.js express cors


    【解决方案1】:

    1。使用 cors 中间件

    app.use(cors)
    

    2。自定义中间件

    app.use((req, res, next) => {
          if(req.method == "OPTIONS") {
              res.sendStatus(200)
          }
          
          next()
      })
    

    【讨论】:

    • 谢谢,我都试过了,但错误仍然存​​在。
    【解决方案2】:

    将app.use(cors()) 放在其他任何内容之前(导入除外)

    const express = require("express");
    const app = express();
    const bodyParser = require("body-parser");
    const cors = require("cors");
    const queries = require("./queries");
    const port = process.env.PORT || 3001;
    
    app.use(cors());
    
    app.use(express.static("public"));
    app.use(bodyParser.json());
    
    app.get("/questions", (req, res) => {
        queries.getAllQuestions().then((questions) => res.send(questions));
    });
    
    app.get("/questions/:id", (req, res) => {
        queries
            .getQuestionById(req.params.id)
            .then((question) => res.send(question));
    });
    
    app.get("/answers", (req, res) => {
        queries.getAllAnswers().then((answers) => res.send(answers));
    });
    
    app.get("/answers/:id", (req, res) => {
        queries.getAnswerById(req.params.id).then((answer) => res.send(answer));
    });
    
    app.get("/users", (req, res) => {
        queries.getAllUsers().then((users) => res.send(users));
    });
    
    app.get("/users/:id", (req, res) => {
        queries.getUserById(req.params.id).then((user) => res.send(user));
    });
    
    app.post("/questions", (req, res) => {
        queries
            .createQuestion(req.body)
            .then((newQuestion) => res.send(newQuestion));
    });
    
    app.post("/answers", (req, res) => {
        queries.createAnswer(req.body).then((newAnswer) => res.send(newAnswer));
    });
    
    app.delete("/questions/:id", (req, res) => {
        queries.deleteQuestion(req.params.id).then(res.sendStatus(204));
    });
    
    app.delete("/answers/:id", (req, res) => {
        queries.deleteAnswer(req.params.id).then(res.sendStatus(204));
    });
    
    app.delete("/users/:id", (req, res) => {
        queries.deleteUser(req.params.id).then(res.sendStatus(204));
    });
    
    app.patch("/questions/:id/upvote", (req, res) => {
        queries
            .patchUpvoteQuestion(req.params.id)
            .then((newVoteCount) => res.send("post"));
    });
    
    app.patch("/questions/:id/downvote", (req, res) => {
        queries
            .patchDownvoteQuestion(req.params.id)
            .then((newVoteCount) => res.send("post"));
    });
    
    app.patch("/answers/:id/upvote", (req, res) => {
        queries
            .patchUpvoteAnswer(req.params.id)
            .then((newVoteCount) => res.send("it worked"));
    });
    
    app.patch("/answers/:id/downvote", (req, res) => {
        queries
            .patchDownvoteAnswer(req.params.id)
            .then((newVoteCount) => res.send("it worked"));
    });
    
    app.listen(port, () => {
        console.log(`listening on ${port}`);
    });
    

    【讨论】:

    • 谢谢,我试过了,但不知何故我仍然遇到同样的 cors 错误。
    猜你喜欢
    • 2017-12-11
    • 2018-03-04
    • 2016-10-30
    • 1970-01-01
    • 2016-05-07
    • 2016-10-30
    • 2019-06-19
    • 2021-05-23
    相关资源
    最近更新 更多