访问控制允许原点错误

问题描述 投票:0回答:2

我正在学习如何使用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有效。

javascript node.js api google-chrome cors
2个回答
0
投票

看起来像快递应用。

请使用:

npm install cors

然后,在其中设置应用程序的使用位置:

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

See Express CORS Documentation Here

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

例如:

router.use(cors())

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)
})
© www.soinside.com 2019 - 2024. All rights reserved.