【问题标题】:Cloud Functions for firebase returning response 500用于 Firebase 返回响应 500 的云函数
【发布时间】:2017-09-21 23:33:36
【问题描述】:

这是我正在调用的函数

'use strict';

const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
const express = require('express');
const cors = require('cors')({origin: true});
const router = new express.Router();

 router.use(cors);  
 router.get('*', (req, res) => {
      res.setHeader('Access-Control-Allow-Origin', '*').status(200)
            .send('Hello, Functions');
    });

exports.date = functions.https.onRequest(router);

但是我收到了这个错误:

XMLHttpRequest 无法加载 https://us-central1-idntt-baed5.cloudfunctions.net/date。不 请求中存在“Access-Control-Allow-Origin”标头 资源。因此,原点 'https://idntt-baed5.firebaseapp.com' 是 不允许访问。响应的 HTTP 状态代码为 500。

【问题讨论】:

  • 你解决了这个错误吗?

标签: javascript ajax firebase google-cloud-functions


【解决方案1】:

您尝试做的正确代码是:

const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);

// Start writing Firebase Functions
// https://firebase.google.com/functions/write-firebase-functions

exports.date = functions.https.onRequest((request, response) => {
    response.send("Hello, Functions");
})

现在你应该去喜欢这个https://us-central1-idntt-baed5.cloudfunctions.net/date

并且您不允许使用 Access-Control-Allow-Origin

【讨论】:

  • 您好,感谢您的回复。当我直接点击 url 时,它可以工作,但是当我使用静态页面中的 XMLHttpRequest 时,我收到此错误:XMLHttpRequest cannot load https://us-central1-idntt-baed5.cloudfunctions.net/date. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'https://idntt-baed5.firebaseapp.com' is therefore not allowed access. The response had HTTP status code 500.
【解决方案2】:

您尝试做的正确代码是:

const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);

exports.date = functions.https.onRequest((request, response) => {
    response.send("Hello, Functions");
})

可能会产生这样的错误,

XMLHttpRequest cannot load https://us-central1-idntt-baed5.cloudfunctions.net/date. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'https://idntt-baed5.firebaseapp.com' is therefore not allowed access. The response had HTTP status code 500.

请在 xhr 请求中使用此标头

req.setRequestHeader('Access-Control-Allow-Origin', '*');  

尝试在mozilla firefox中运行,谷歌浏览器由于安全问题不支持这个

【讨论】:

    【解决方案3】:

    如果您通过托管在 firebase 中的站点/页面请求该功能,您(firebase 托管)应添加重写规则。 Firebase 文档中对此进行了解释:https://firebase.google.com/docs/hosting/functions#directing_hosting_requests_to_your_function

    【讨论】:

      猜你喜欢
      • 2018-11-24
      • 2018-04-14
      • 2020-04-15
      • 1970-01-01
      • 2021-03-12
      • 2019-08-21
      • 2020-03-31
      • 2019-12-17
      相关资源
      最近更新 更多