【问题标题】:No solution working for cors and cloud function没有适用于 cors 和云功能的解决方案
【发布时间】:2020-10-03 10:42:43
【问题描述】:

我在使用 CORS 和云功能时遇到问题。从阅读文档开始,我已经阅读并尝试了随处发布的所有解决方案,我感到困惑。这是我目前使用云功能的入口点:

exports.entryPoint = (req, res) => {
    res.set('Access-Control-Allow-Origin', '*');
    const query = req.body.searchTerm;
    getData(query).then(data => {
        const result = formatData(data)
        res.send(result)
    })
}

这就是文档所说的用另一种方式进行预检检查的方式,包括:

if (req.method === 'OPTIONS') {
    // Send response to OPTIONS requests
    res.set('Access-Control-Allow-Methods', 'GET');
    res.set('Access-Control-Allow-Headers', 'Content-Type');
    res.set('Access-Control-Max-Age', '3600');
    res.status(204).send('');
} else {
    res.send('Hello World!');
}

这些都不适合我。我已阅读并尝试使用

const cors = require('cors')({origin: true})

这条路线已被证明没有成功。我收到的错误是“Access-Control-Allow-Origin missing”。在浏览器中检查标头实际上从来没有任何与 cors 相关的响应标头出现在我尝试过的所有解决方案中。我唯一的想法是我有 res.set 在错误的地方? 谢谢。

【问题讨论】:

  • 请更新您的问题摘要以反映您的问题

标签: cors gcloud


【解决方案1】:

请注意您正在设置的选项,如果您正在执行POST 请求,则也应包括在内。 Mozilla documentation Preflighted request

exports.entryPoint = (req, res) => {
    if (req.method === 'OPTIONS') {
        // Send response to OPTIONS requests
        res.set('Access-Control-Allow-Origin', '*');
        res.set('Access-Control-Allow-Methods', 'POST, GET, OPTIONS'); // CHANGED
        res.set('Access-Control-Allow-Headers', 'Content-Type');
        res.set('Access-Control-Max-Age', '3600');
        res.status(204).send('');
        return; // ADDED
    }
    // ACTUAL RESPONSE
    const query = req.body.searchTerm;
    getData(query).then(data => {
        const result = formatData(data)
        res.send(result)
    });
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-21
    • 1970-01-01
    • 2022-06-23
    • 2020-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多