NodeJS Firebase 功能在部署后失败

Posted

技术标签:

【中文标题】NodeJS Firebase 功能在部署后失败【英文标题】:NodeJS Firebase Functions Fails After Deployment 【发布时间】:2020-05-23 04:02:59 【问题描述】:

我有一个 NodeJS 并使用 Firebase 功能。在 localhost 上运行时,它正在发送预期的 JSON。将其部署到 Firebase 后,尝试访问端点时出现以下错误:

TypeError: Cannot read property 'stack' of undefined
    at getErrorDetails (/worker/worker.js:365:14)
    at logAndSendError (/worker/worker.js:579:12)
    at process.<anonymous> (/worker/worker.js:854:5)
    at emitTwo (events.js:126:13)
    at process.emit (events.js:214:7)
    at emitPendingUnhandledRejections (internal/process/promises.js:108:22)
    at process._tickDomainCallback (internal/process/next_tick.js:230:7)

前端返回如下错误:

Access to XMLHttpRequest at 'https://vear-node.firebaseapp.com/xmlfeed' from origin 'http://localhost:3000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

我怀疑这是一个 CORS 问题,因为我正在使用 Express cors 中间件,并且可以毫无问题地访问此服务器上的其他端点。

代码:

const app = express().use(cors());

app.get('/xmlfeed', cors(), async (request, response) => 
    const feedResponse = await getXMLFeedData();
    const json =  products: feedResponse ;
    response.json(json);
);
export const getXMLFeedData = async (): Promise<any> => 
    try 
        const response = await axios.get('https://www.nae-vegan.com/extend/catalog_81.xml');

        const parsedResponse = await parseXMLResult(response);
        const jsonString = JSON.stringify(parsedResponse);
        const jsonObject = JSON.parse(jsonString);
        const formatted = await formatNAEProducts(jsonObject);

        return Promise.resolve(formatted);
     catch (error) 
        return Promise.reject(error);
    
;
const parseXMLResult = async (response: any): Promise<any> => 
    var parsedResult: any = undefined;

    try 
        await parser.parseString(response.data, (err, result) => 
            parsedResult = result;
        );

        return Promise.resolve(parsedResult);
     catch (error) 
        return Promise.reject(error);
    
;

端点:https://vear-node.firebaseapp.com/xmlfeed

有谁知道在本地工作完美部署后会发生什么错误?

谢谢!

【问题讨论】:

请编辑问题以显示显示问题的完整、最少的代码。现在我们看不到 getXMLFeedData() 做了什么,也没有任何代码显示名为 stack 的属性。 @DougStevenson 用更多代码更新了这个问题。没有称为堆栈的属性,这就是为什么我对它的来源感到困惑。 来自快递。 @dcotter 你解决了这个问题吗?你还记得怎么做吗? 【参考方案1】:

您必须允许所有 cors 来源请求进入您的标头。由于您使用的是 express 框架,因此您必须将其包含在您的 app.use 方法中。检查下面的代码。

app.use((req, res) => 
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
);

【讨论】:

我认为这不是 CORS 问题。添加这些标题会产生相同的错误。我也在使用像 const app = express().use(cors()); 这样的 Express CORS,它启用了所有 CORS 请求 expressjs.com/en/resources/middleware/cors.html

以上是关于NodeJS Firebase 功能在部署后失败的主要内容,如果未能解决你的问题,请参考以下文章

部署firebase云功能时创建功能项目失败

Firebase 部署功能构建失败:构建错误详细信息不可用

错误 Firebase cli 云功能部署。 npm 错误!函数@ lint 脚本失败

Firebase Angular 应用程序未连接 Heroku 上的 h NodeJS 应用程序

NodeJS + Google Login + Firebase Functions 导致解码 Firebase 会话 cookie 失败

Firebase 部署后功能出错