请求的资源上不存在'Access-Control-Allow-Origin'标头。节点快速获取



我知道很多人都经历过类似的问题,但对他们有效的修复对我没有任何帮助。无论我做什么,我都会得到:

Access to fetch at 'http://localhost:5000/api/places/comments/test' from origin 'http://localhost:3000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.

我在express中使用node,这是我的app.js文件(与CORS相关的部分(:

const app = express();
app.use(bodyParser.json());
app.use((req, res, next) => {
res.setHeader("Access-Control-Allow-Origin", "*");
res.setHeader(
"Access-Control-Allow-Headers",
"Origin, X-Requested-With, Content-Type, Accept, Authorization"
);
res.setHeader(
"Access-Control-Allow-Methods",
"GET, POST, PATCH, DELETE, PUT"
);
next();
});
app.use("/api/places", placesRouter);

然后路由文件(与不工作的路由相关(

placesRouter.post("/comments/test", requireLogin, addComment);

最后是处理程序:

const addCommentHandler = async () => {
try {
const response = await fetch(
`${process.env.REACT_APP_BACKEND_URL}/api/places/comments/test`,
{
method: "POST",
body: { comment: formState.inputs.comment.value },
headers: {
Authorization: `Bearer ${auth.token}`,
"Content-Type": "application/json",
},
}
);
const responseData = await response.json();
console.log(responseData);
} catch (e) {}
};

我知道尸体是寄来的,我也试过《邮差》,它很管用。

我在这里做错了什么?

您正在执行res.setHeader()而不是req.setHeader()

const app = express();
app.use((req, res, next) => {
req.setHeader("Access-Control-Allow-Origin", "*");
req.setHeader(
"Access-Control-Allow-Headers",
"Origin, X-Requested-With, Content-Type, Accept, Authorization"
);
req.setHeader(
"Access-Control-Allow-Methods",
"GET, POST, PATCH, DELETE, PUT"
);
next();
});
app.use(bodyParser.json());
app.use("/api/places", placesRouter);

最新更新