firebase - Firebase 托管上的 SSR 与 GC 功能不起作用

标签 firebase google-cloud-functions nuxt.js firebase-hosting

好的,这是我的文件夹结构

这是函数索引文件:

const functions = require('firebase-functions')
const express = require('express')
const { Nuxt } = require('nuxt')

const app = express()

const config = {
  dev: false,
  buildDir: 'nuxt',
  build: {
    publicPath: '/'
  }
}
const nuxt = new Nuxt(config)

function handleRequest (req, res) {
  res.set('Cache-Control', 'public, max-age=600, s-maxage=1200')
  nuxt.renderRoute('/').then(result => {
    res.send(result.html)
  }).catch(e => {
    res.send(e)
  })
}

app.get('*', handleRequest)
exports.nuxtApp = functions.https.onRequest(app)

但是访问该网址时我得到的只是"{"code":"MODULE_NOT_FOUND"} (部署后)

我在 nuxt.config.js 中所做的只是告诉它将构建目录放入函数文件夹中的 nuxt 文件夹中

firebase.json

{
  "hosting": {
    "public": "public",
    "ignore": [
      "firebase.json",
      "**/.*",
      "**/node_modules/**"
    ],
    "rewrites": [
      {
        "source": "**",
        "function": "nuxtApp"
      }
    ]
  }
}

当使用 Firebase Serve 进行本地测试时,它可以工作,但它只渲染基本 url / 而没有其他内容,而且我也没有像我的 scss 文件或应用 list 这样的静态资源。

最佳答案

经过几天的调试,我找到了解决方案。

首先,您必须扩展错误日志记录,以便可以看到堆栈跟踪:

console.error(e)
res.send(e)

我的错误是:

error#1 firebase 软件包未安装在我的函数文件夹中,因此我必须使用 npm install --save firebase 安装它在 functions 目录中。 Cloud Functions 不需要整个 firebase 包,但我的 nuxt 项目需要它来使用 firestore

error#2 您可能会收到类似 firebaseApp.firestore is not a function 的错误。这是由于 firebase 的错误导入导致您无法正常运行。我找到了这个问题的解决方案here

我更改此导入:

import firebase from 'firebase';
import 'firebase/firestore';

对此:

import firebase from '@firebase/app';
import '@firebase/firestore'

解决这两个错误后,我的 NuxtJs 应用与 Firebase Cloud Functions 配合良好。

关于firebase - Firebase 托管上的 SSR 与 GC 功能不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53303161/

相关文章:

typescript - 尝试导入自定义包并运行模拟器时获取 "Error: Cannot find module <module>"

javascript - Nuxt.js |打开一个新页面作为带有路由的模式窗口

javascript - Nuxt 抛出 'The "path"argument must be of type string' or console spam

javascript - 如何添加使用带有指定键的 Push() 而不是 Firebase 上的默认键

javascript - 对 firebase 的多个自定义身份验证请求失败

Firebase 部署错误 - 找不到模块 'firebase'

javascript - 无法设置未定义的属性 'running'

javascript - 为什么 firestore/AngularFire SDK 将多个 promise 打包到一个请求中?

angular - 无法添加任务 ':processDebugGoogleServices',因为同名任务已存在

javascript - 如何返回嵌套的 Promise?