![](/img/trans.png)
[英]Nuxt3 and Firebase Cloud Functions: Where to place Firebase cloud functions in the /server directory?
[英]Nuxt3 and Firebase Cloud Function Hosting: How to access private key in .env file?
我有一個 Nuxt3 應用程序,它使用“服務器路由”來創建用於前端的后端 API。
我有以下服務器路由:
server/api/imagekit/deleteFile.js
:
import ImageKit from 'imagekit'
const imagekit = new ImageKit({
publicKey: useRuntimeConfig().public.imagekitPublicKey,
privateKey: useRuntimeConfig().imagekitPrivateKey,
urlEndpoint: useRuntimeConfig().public.imagekitBaseURL
})
export default defineEventHandler(async (event) => {
// Purge cache of file from Imagekit
// See detailed email from Rahul @ imagekit dated aug 31, 2022
const body = await useBody(event)
const response = await imagekit.purgeCache(body.url)
return response
})
上面的代碼在本地運行良好,但是一旦我部署到 Firebase 托管,我在嘗試訪問 API deleteFile
時收到以下服務器錯誤:
description: ""
message: "Missing privateKey during ImageKit initialization"
statusCode: 500
statusMessage: "Internal Server Error"
url: "/api/imagekit/deleteFile"
如果它與這個問題相關,這是我的 Nuxt 的nuxt.config.ts
文件的代碼,其中列出了runtimeConfig
屬性:
runtimeConfig: {
imagekitPrivateKey: '',
public: {
baseURL: process.env.NODE_ENV === 'production' ? 'https://example.com' : 'http://localhost:3000',
imagekitBaseURL: 'https://ik.imagekit.io/example/',
imagekitPublicKey: 'public_AdZM6u2+FvznG/LngYp7Ab3TJy4='
}
}
此外,我的firebase.json
使用 2 個代碼庫用於功能:一個用於服務器,一個用於雲功能:
{
"functions": [
{
"source": ".output/server",
"codebase": "nuxt"
},
{
"source": "functions",
"codebase": "functions"
}
],
"hosting": [
{
"site": "XXX",
"public": ".output/public",
"ignore": ["firebase.json", "**/.*", "**/node_modules/**"],
"cleanUrls": true,
"rewrites": [
{
"source": "**",
"function": "server"
}
]
}
]
}
我在項目根目錄中有一個包含 imagekitPrivateKey 值的.env
文件。
我如何將此信息提供給 Firebase 托管部署,以便 ImageKit 使用私鑰正確初始化?
您可以從.env
中的nuxt.config.ts
讀取變量,如下所示:
export default defineNuxtConfig({
runtimeConfig: {
// Uppercase preferred in .env file
imagekitPrivateKey: process.env.IMAGEKIT_PRIVATE_KEY,
},
});
然后你可以在你的 API 路由中訪問它:
export default defineEventHandler((event) => {
const { imagekitPrivateKey } = useRuntimeConfig();
return { message: "success" };
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.