[当我在Zeit上部署Nuxt JS通用应用程序时,我试图利用Cache-Control
中提到的Zeit的Zeit Cache Doc标头。
然后我试图寻找如何在我的Nuxt JS应用程序中添加Cache-Control
标头,并幸运地发现this GitHub issue在解释同一件事。
现在,无论如何我还是在Nuxt应用程序中使用serverMiddleware
来使用firebase-admin
获取当前登录用户的数据,所以我认为我可以轻松地在代码中添加响应标头,所以我做到了。在我的/serverMiddleware/handleCookie.js
中,它是这样的:
const Cookies = require('cookies')
const admin = require('../services/firebase-admin-init')
export default async (req, res, next) => {
res.setHeader('Cache-Control', 's-maxage=1000, stale-while-revalidate')
try {
const authUser = await verifyCookie(req, res)
if (authUser) {
const userData = await fetchUserDetailsFromFirestore(
req,
authUser.uid,
authUser.email_verified
)
if (userData) {
next()
}
} else {
next()
}
} catch (error) {
console.error(error)
}
}
现在疯狂的事情是,当我运行开发人员即yarn nuxt
并通过localhost检查我的网站时,我可以轻松地在Chrome网络工具中看到添加的标题。
但是当我使用now --prod
将项目推送到Zeit Now进行托管并检查我的实际站点时,看不到此标题。
现在,我不知道我做错了什么,因为如果我做错了,它应该不会显示在localhost dev响应头中。我花了很多天试图解决这个问题,但无济于事。不知道为什么会这样。我还在Zeit部署中使用nuxt/now-builder,这是我的now.json
文件。
{
"version": 2,
"regions": ["bom1"],
"builds": [
{
"src": "nuxt.config.js",
"use": "@nuxtjs/now-builder",
"config": {
"serverFiles": [
"services/firebase-admin-init.js",
"serverMiddleware/**"
]
}
}
]
}
[如果有人可以在这件事上提供帮助,那将非常有帮助。
您的错误与时间和异步有关。在dev中,您不需要等待,因此服务器会稍微慢一些,应该发生类似authUser而不是userData的情况,在这种情况下,您将没有next()函数。
我重构了您的中间件,它将有所帮助。
const Cookies = require('cookies')
const admin = require('../services/firebase-admin-init')
export default (req, res, next) => {
res.setHeader('Cache-Control', 's-maxage=1000, stale-while-revalidate')
verifyCookie(req, res)
.then(authUser => {
fetchUserDetailsFromFirestore(
req,
authUser.uid,
authUser.email_verified
)
})
.catch((error) => {
console.error(error)
})
.finally(() => {
next()
})
}