我正在尝试在Firebase托管中使用SSR实现Nuxt(使用Firebase函数(,但是在我的函数被触发后,我不断收到"504超时等待函数响应"。
我的火力基本功能:
const functions = require("firebase-functions");
const { Nuxt } = require("nuxt");
const express = require("express");
const app = express();
const config = {
dev: false,
buidlDir: 'src',
build: {
publicPath: '/'
}
};
const nuxt = new Nuxt(config);
function handleRequest(req, res){
console.log('handling request');
//res.set('Cache-Control', 'public, max-age=600, s-maxage=1200')
nuxt.renderRoute('/')
.then(result => {
console.log('result: ' + result.html);
res.send(result.html);
})
.catch(e => {
res.send(e);
console.log(e);
})
}
app.get('*', handleRequest);
exports.ssrApp = functions.https.onRequest(app);
我还尝试过:
function handleRequest(req, res) {
console.log("log3");
res.set("Cache-Control", "public, max-age=300, s-maxage=600");
return new Promise((resolve, reject) => {
nuxt.render(req, res, promise => {
promise.then(resolve).catch(reject);
});
});
}
我也有节点 vs8 作为我的函数的默认,因为我读到这可能会带来问题。
"engines": {
"node": "8"
},
但结果是一样的。我的函数正在被触发,但它总是超时,顺便说一句:我在本地服务以及尝试部署到 Firebase 本身时遇到此问题。
如果您需要更多信息/代码来尝试帮助并查看问题可能是什么,请告诉我。
首先,如果您想找出导致它的原因,请使用调试选项。
其次,如果遇到超时错误,请检查路径是否有效。 如果您成功构建了Nuxt并nuxt.render
,则错误由Nuxt处理,Nuxt将显示此错误页面。 换句话说,如果您没有看到Nuxt错误页面,则原因可能与Nuxt无关。
由于超时错误,我也卡住了4个小时,我终于发现原因是publicPath
的内容。
请检查这两件事。
buidlDir
有效?
buildDir
的路径是否有效?您应该检查文件夹是否已成功部署到云函数.nuxt
。
publicPath
内容上传成功?
.nuxt/dist
中构建的内容必须上传到 Firebase 主机。您应该手动检查它。 键入 URL 到地址栏 ex( https://test.firebaseapp.com/path/to/file.js
最后,我发布了一个网址 我的示例项目,使用 Nuxt 和 Firebase。
我也像你一样坚持,这让我很累。如果这个答案对像我这样的人有帮助,我真的很高兴。
PS:当您在文件夹中构建Nuxt时functions
nuxt start
失败。小心。在我的项目中,我在 root 中构建它,部署时,我复制了它。 Nuxt SSR 与 Firebase 集成
我遇到了同样的问题,因为Nuxt还没有准备好(promise
是未定义的(
因此,您可以在new Nuxt()
后尝试添加nuxt.ready()
例:
const functions = require('firebase-functions');
const express = require('express');
const { Nuxt } = require('nuxt');
const config = {
dev: false
// Your config
};
const nuxt = new Nuxt(config);
const app = express();
nuxt.ready(); // <---------- Add this!
async function handleRequest(req, res) {
res.set('Cache-Control', 'public, max-age=1, s-maxage=1');
await nuxt.render(req, res);
}
app.get('*', handleRequest);
app.use(handleRequest);
exports.ssrApp = functions.https.onRequest(app);
参考: https://github.com/nuxt/nuxt.js#using-nuxtjs-programmatically