Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js CORS标头未应用于Express cloud函数中的特定路由_Node.js_Express_Google Cloud Functions_Cors_Preflight - Fatal编程技术网

Node.js CORS标头未应用于Express cloud函数中的特定路由

Node.js CORS标头未应用于Express cloud函数中的特定路由,node.js,express,google-cloud-functions,cors,preflight,Node.js,Express,Google Cloud Functions,Cors,Preflight,我为云功能实现了一个基本的express应用程序。我使用了cors库来启用cors。有4个api端点,所有4个端点都需要预引导。出于某种原因,访问控制允许原点:标题放在3条路线上,而不是第4条路线上。 确切地说,我正在使用Content-Type:application/json来处理POST请求,这需要进行预引导。所有端点都需要相同的头,但不适用于最后一个 代码片段: const express = require("express"); const cors = requ

我为云功能实现了一个基本的express应用程序。我使用了cors库来启用cors。有4个api端点,所有4个端点都需要预引导。出于某种原因,
访问控制允许原点:
标题放在3条路线上,而不是第4条路线上。 确切地说,我正在使用Content-Type:application/json来处理POST请求,这需要进行预引导。所有端点都需要相同的头,但不适用于最后一个

代码片段:

const express = require("express");
const cors = require("cors");
const bodyParser = require('body-parser');
const admin = require("firebase-admin");
admin.initializeApp();

const app = express();

app.use(cors());

app.use(bodyParser.json());

app.use(express.json());

app.use('/', require('./controllers'));

exports.apiv2 = functions.https.onRequest(app);

路线:

const express = require('express');
const router = express.Router();


router.use('/create-player', require('./createPlayer'));
router.use('/create-game', require('./createGame'));
router.use('/join-game', require('./joinGame'));
router.use('/move', require('./makeMove'));

// 404 error handler for invalid player and game IDs
router.use((err, req, res, next) => {
    res.json({ error: err.msg });
});


module.exports = router;
仅对于/move路由,即使在飞行前请求通过后,cors请求也会失败。由于某种原因,实际请求失败


express是否仅为一个端点放置了任何特定的访问控制标头?

您可以在
app.js
中将此中间件设置在路由中间件之前,以解决此问题:

//app.js
...
应用程序使用(功能(请求、恢复、下一步){
res.header('Access-Control-Allow-Origin','*');
res.header('Access-Control-Allow-Methods','GET、PUT、POST、DELETE、OPTIONS');
res.header('Access-Control-Allow-Headers','Content-Type,Authorization,Content-Length,X-request-With');
if('OPTIONS'==req.method)
res.sendStatus(200);
其他的
next();
});
...
应用程序使用(路线);

然后,这将应用于您的所有路线。

cors
已在代码中使用。基本上也是这样。