具有GC功能的Firebase托管上的SSR无法正常工作

时间:2018-11-14 15:03:01

标签: 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文件或应用清单一样的静态资产。

1 个答案:

答案 0 :(得分:1)

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

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

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

我的错误是:

错误#1 firebase软件包未安装在我的functions文件夹中,因此我必须使用npm install --save firebasefunctions目录中进行安装。 Cloud Functions不需要整个firebase软件包,但是我的nuxt项目需要firestore使用该软件包

错误#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中运行良好。