如何解决Express JS中没有'Access-Control-Allow-Origin'的问题?

时间:2019-08-12 08:33:31

标签: node.js express vue.js cors

我知道这个问题已经得到回答,其中一些工作了,但对我而言却没有。我正在努力寻找解决此问题的方法:

 Access to XMLHttpRequest at 'http://lolcahost:9000/api/users' from origin 'http://localhost:8080' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

我已经尝试下载chrome扩展程序,但没有帮助我,使用 app.use(cors())也没有帮助我。

这是我在expressjs中的代码

    /* Importing all necessary packages. */
const express = require('express');
const cors = require('cors');
const bodyParser = require('body-parser');

/* Default port */
const port = process.env.PORT || 9000;
/* Creating express object */
const app = express();

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: false}));
app.use('/api', require('./routes/route'));
app.use(cors());


app.get('/', (request, response) => {
    response.json({
        HOME: "HELLO JSON"
    })
});

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

这是我在vuejs中试图渲染数据的代码。

getUsers() {
            axios
                .get("http://localhost:9000/api/users/")
                .then(response => (this.results = response.data))
                .catch(error => console.log(error));
        }

2 个答案:

答案 0 :(得分:3)

您正在使用cors路由的/api中间软件之后。因此,实际上cors中间件甚至没有被调用。将cors置于其他中间件之上。

const app = express();

app.use(cors());
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: false}));
app.use('/api', require('./routes/route'));

中间件按照初始化顺序调用。现在,/api首先被初始化,并且不是中间件(不会调用next()函数),因此路由之后,任何中间件基本上都是无法访问的代码。

答案 1 :(得分:0)

尝试一下。

    app.use(function(req, res, next) {
       res.header("Access-Control-Allow-Origin", "http://localhost:8080"); // update to match the domain you will make the request from
       res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
       next();
    });

    app.use(function(req, res, next) {
        res.header("Access-Control-Allow-Origin", "*");
        res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
        next();
    });