我有一個帶有 mongoose 的 Next.js 應用程式來連接到我的 mongodb。模型匯入db.ts以確保與資料庫有活動連接,如下所示:
import { model, models, Schema } from "mongoose";
import "../../db";
這是連接到我的資料庫的代碼:
import mongoose from "mongoose";
mongoose.connect("mongodb://admin:admin@localhost:27022/admin");
我已經繼續在 next.js 中制作了一些無服務器功能,并添加了一些從我的getServerSideProps. 所有這些都作業得很好。我可以與模型互動、創建新檔案、洗掉它們并更新它們。沒有問題。
問題
我最近添加了一個新組件:它位于/pages/flashcards/[id].tsx. 就像我的其他組件一樣,這個組件匯入了我的一個貓鼬模型。但是,出于某種原因,Webpack 感覺它應該將模型及其匯入捆綁在一起并將其../../db發送并發送給客戶端,這會導致此錯誤:
TypeError: mongoose__WEBPACK_IMPORTED_MODULE_0___default(...).connect 不是函式
再說一遍:這不會發生在我使用與出現這些問題的組件完全相同的模型的任何其他組件上。
uj5u.com熱心網友回復:
出現此問題是因為您在頁面中有以下未使用的匯入/pages/flashcards/[id]。
import question from "../../db/models/question";
getServerSideProps在構建客戶端包時,Next.js 將洗掉內部的任何代碼getStaticProps,以及這些方法專門使用的匯入。
但是,由于question沒有明確地在 中使用getServerSideProps,Next.js 無法確定匯入僅用于在服務器上使用。這意味著它將包含在服務器和客戶端捆綁包中。
您可以使用Next.js 代碼消除工具來驗證 Next.js 從客戶端包中消除了什么。您會看到,如果您通過它運行頁面的代碼,則不會洗掉匯入。但是,一旦您在內部參考并使用它getServerSideProps,Next.js 就會自動將其從匯入中洗掉。
確保始終注釋掉/洗掉未使用的匯入(有 linting 規則可以幫助您做到這一點)。
uj5u.com熱心網友回復:
您是否嘗試過將下一個 npm 包升級到最新版本?(撰寫本文時為 12.0.8)。我有一個類似的問題 Next 在不同的 API 路由之間給出不一致的錯誤,所有配置的方式都相同,但有些會引發你共享的相同 TypeError。升級軟體包為我解決了這個問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/414130.html
標籤:
上一篇:如何更新貓鼬中的數字陣列
