访问控制允许起源错误

时间:2019-12-10 09:03:16

标签: javascript node.js api google-chrome cors

我正在学习如何使用Node.js构建API。当我尝试从浏览器获取信息时,我遇到了cors错误,我的研究告诉我,除非在浏览器中禁用了cors,否则很难在localhost上发出请求,因此我设置了cors,但我仍然继续收到该错误。 这是我的app.jsroutes.js文件。

.............
app.use(cors());
app.use("/dashboard", dashboardRouter);
.............
// My routes
router.get("/api/inventory", function (req, res, next) {
    return new Promise(function (resolve, reject) {
        res.header("Access-Control-Allow-Origin", "*");
        if (req.header('Authorization') == 'Bearer test') {
            db.getFullInventory()
                .then(function (result) {
                    resolve(
                        res.json({
                            success: true,
                            data: result
                        }));
                })
                .catch(
                    function (err) {
                        reject(res.json({
                            success: false,
                            data: err
                        }));
                    }
                )
        } else {
            reject(res.json({
                success: false,
                data: "token is invalid"
            }));
        }
    })
});

有人可以向我解释如何使我的api兼容。 Postman可以工作。

2 个答案:

答案 0 :(得分:1)

这看起来像个快递应用程序。

请使用:

npm install cors

然后,在其中设置您的应用使用范围:

const app = express()
app.use(cors())

See Express CORS Documentation Here

对于模块化路由(似乎正在使用),您可能还需要将CORS添加到模块化路由。

例如:

router.use(cors())

答案 1 :(得分:0)

这可能是某种语法错误。

.............
app.use(cors()); // set this at the beginning of the route usage.
app.use("/dashboard", dashboardRouter);
.............
// My routes
router.get("/api/inventory", function (req, res, next) {
    return new Promise(function (resolve, reject) {
        res.header("Access-Control-Allow-Origin", "*"); // indicating that we will allow any urls
        if (req.header('Authorization') == 'Bearer test') {
            db.getFullInventory()
                .then(function (result) {
                    resolve(
                        res.json({
                            success: true,
                            data: result
                        }));
                })
                .catch(
                    function (err) {
                        reject(res.json({
                            success: false,
                            data: err
                        }));
                    }
                )
        } else {
            reject(res.json({
                success: false,
                data: "token is invalid"
            }));
        }
    })
});

使用来自浏览器的抓取应如下所示

fetch('http://localhost:3000/dashboard/api/inventory', {
    method: 'GET',
    headers: {
        'Authorization': 'Bearer test'
    }
}).then(function (result) {
    return result.json()
}).then(function (value) {
    console.log(value)
}).catch(function (err) {
    console.log(err)
})