嘿,你们真的在这里挣扎。
我正在尝试在我的Next.js应用程序中使用firebase,特别是在api上。当我在本地构建生产和本地开发时,它工作得很好。但是,一旦我在vercel平台上部署到生产环境中,我就得到了一个500 - Internal Server Error。我已经能够缩小它是由使用await getDocs(q)引起的错误,但不确定如何修复它。
本质上,我正在尝试使用来自firestore的数据进行动态api路由。
firebase.js
// Import the functions you need from the SDKs you need
import { initializeApp } from "firebase/app";
import { getFirestore } from "firebase/firestore";
import { getStorage } from "firebase/storage";
// TODO: Add SDKs for Firebase products that you want to use
// https://firebase.google.com/docs/web/setup#available-libraries
// Your web app's Firebase configuration
// For Firebase JS SDK v7.20.0 and later, measurementId is optional
const firebaseConfig = {
apiKey: "<REDACTED_FOR_STACKOVERFLOW>",
authDomain: "<REDACTED_FOR_STACKOVERFLOW>",
databaseURL: "<REDACTED_FOR_STACKOVERFLOW>",
projectId: "<REDACTED_FOR_STACKOVERFLOW>",
storageBucket: "<REDACTED_FOR_STACKOVERFLOW>",
messagingSenderId: "<REDACTED_FOR_STACKOVERFLOW>",
appId: "<REDACTED_FOR_STACKOVERFLOW>",
measurementId: "<REDACTED_FOR_STACKOVERFLOW>"
};
// Initialize Firebase
const app = initializeApp(firebaseConfig);
// Database
const db = getFirestore();
// Storage
const storage = getStorage(app)
export {
app,
storage,
db
}/api/users/[name].js
import { db } from './firebase.js'
export default async function handler(req, res) {
try {
const { name } = req.query
let users = []
const q = query(collection(db, "users"), where("name", "==", name))
const querySnapshot = await getDocs(q)
if (querySnapshot.empty) {
res.status(404).json({error: "Document does not exist."})
} else {
querySnapshot.forEach((doc) => {
users.push(doc.data())
})
res.status(200).json(users)
}
} catch(err) {
res.status(404).json({error: err})
}
}package.json
{
"name": "app-frontend",
"version": "0.1.0",
"private": true,
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start",
"lint": "next lint"
},
"dependencies": {
"@headlessui/react": "^1.4.2",
"@heroicons/react": "^1.0.5",
"bootstrap": "^4.6.0",
"classnames": "^2.2.6",
"next": "11.0.1",
"firebase": "^9.5.0",
"postcss-custom-properties": "^8.0.11",
"postcss-flexbugs-fixes": "^5.0.2",
"postcss-import": "^14.0.2",
"postcss-nested": "^5.0.5",
"postcss-nesting": "^8.0.1",
"postcss-preset-env": "^6.7.0",
"react": "17.0.2",
"react-dom": "17.0.2",
"react-icons": "^4.2.0",
"react-markdown": "^6.0.2",
"react-pro-sidebar": "^0.6.0",
"react-remark": "^2.0.3",
"rehype-raw": "^5.1.0",
"rehype-react": "^6.2.1",
"remark-html": "^13.0.1",
"remark-react": "^8.0.0",
"remark-rehype": "^8.1.0",
"sass": "^1.35.1",
"xhr2": "^0.2.1"
},
"devDependencies": {
"autoprefixer": "^10.2.6",
"eslint": "7.29.0",
"eslint-config-next": "11.0.1",
"postcss": "^8.3.5",
"tailwindcss": "^2.2.4"
}
}服务器端的错误是这样开始的:@firebase/firestore: Firestore (9.5.0): INTERNAL UNHANDLED ERROR: Error: ENOENT: no such file or directory, open '/var/task/node_modules/@firebase/firestore/dist/src/protos/google/firestore/v1/firestore.proto'
发布于 2022-01-18 20:28:46
将firebase降级到9.4.0为我解决了确切的问题。我不确定这是不是一个好的修复方法,但它是有效的。
https://stackoverflow.com/questions/70164281
复制相似问题