【发布时间】:2021-03-21 12:48:10
【问题描述】:
我正在学习使用 Node.js、Express 和 MongoDB 实现 API。我处于早期学习阶段。我已将使用 npm i cors 的 cors 包添加到项目中。我在我的项目中使用cors 作为中间件,如下所示。
const express = require("express");
const app = express();
const cors = require("cors");
const mongojs = require("mongojs");
const { body, param, validationResult } = require("express-validator");
const db = mongojs("travel", ["records"]);
const bodyParser = require("body-parser");
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.use(
cors({
origin: ["http://a.com", "http://b.com"],
methods: ["GET"],
allowHeaders: ["Authorization", "Content-Type"],
})
);
app.get("/api/records", cors(corsOptions), function (req, res) {
db.records.find(function (err, data) {
if (err) {
return res.sendStatus(500);
} else {
return res.status(200).json({
meta: { total: data.length },
data,
});
}
});
});
app.post(
"/api/records",
[
body("name").not().isEmpty(),
body("from").not().isEmpty(),
body("to").not().isEmpty(),
],
function (req, res) {
const errors = validationResult(req);
if (!errors.isEmpty()) {
return res.status(400).json({ errors: errors.array() });
}
db.records.insert(req.body, function (err, data) {
if (err) {
return res.status(500);
}
const _id = data._id;
res.append("Location", "/api/records/" + _id);
return res.status(201).json({
meta: { _id },
data,
});
});
}
);
app.listen(8000, function () {
console.log("Server running at port 8000...");
});
我只在允许的方法中添加了GET 请求。但是当我尝试POST 新记录时,它工作正常。此外,我只在主机列表中添加了"http://a.com", "http://b.com",但来自 localhost 的所有请求都正常工作。请让我知道我在这里缺少什么。非常感谢。
【问题讨论】:
-
您从哪种类型的客户端进行 POST?它来自浏览器吗?或者来自其他一些 http 客户端。 CORS 保护仅在浏览器中实施和执行。此外,您的请求是否真正跨源,因为请求来自与您用于访问 POST 请求不同来源的网页?
-
我使用 Insomnia 作为客户端。 “CORS 保护仅在浏览器中实施和执行”。著名的。我想这不是真正的跨源,因为我使用的是 localhost。