我试图为Next.js + Typescript应用程序创建一个缓存的mongoose连接,但使用:
let cached = global.mongoose;
if (!cached) {
cached = global.mongoose = { conn: null, promise: null };
}
global.mongoose显示以下错误:Element implicitly has an 'any' type because type 'typeof globalThis' has no index signature.ts(7017)
**编辑:**这里是完整的/lib/dbConnect.ts
文件
import mongoose, { Connection } from "mongoose";
const MONGODB_URI: string = process.env.MONGODB_URI!;
if (!MONGODB_URI) {
throw new Error(
"Please define the MONGODB_URI environment variable inside .env.local"
);
}
let cached = global.mongoose;
if (!cached) {
cached = global.mongoose = { conn: null, promise: null };
}
async function dbConnect() {
if (cached.conn) {
return cached.conn;
}
if (!cached.promise) {
const opts = {
bufferCommands: false,
};
cached.promise = mongoose.connect(MONGODB_URI, opts).then((mongoose) => {
return mongoose;
});
}
cached.conn = await cached.promise;
return cached.conn;
}
export default dbConnect;
4条答案
按热度按时间k3bvogb11#
由于您在技术上扩展了全局上下文,因此需要添加它的新类型。
对于没有类型的包,我通常在根文件夹中有一个
custom.d.ts
。在您的情况下:
另外,不要忘记在
tsconfig.json
中添加custom.d.ts
:与Prisma连接的参考:https://stackoverflow.com/a/69434850/14122260
x8diyxa72#
作为Prisma链接:
创建新文件utils/global.d.ts
在tsconfig.json中添加以包含:
dbConnect.js:
未测试
ef1yzkbh3#
快速简单的解决方案!
此连接文件基于official Next.Js example on GitHub。
该项目可以使用mongoose库连接到mongodb。但是,他没有提供如何在TypeScript中实现这一点的示例。但是,您可以轻松地转换示例代码,该代码将正常工作,而无需在
utils/global.d.ts
等中声明类型。1首先安装mongoose及其flavors。
要在Next.js中的TypeScript项目中安装“mongoose”,请执行以下步骤:
1 -打开项目根目录下的终端。
2 -运行以下命令安装“mongoose”:
3 -运行以下命令安装“mongoose”类型:
2创建TypeScript连接文件
dbConnect.ts
。kse8i1jr4#
我没有看到你的文件有什么特别的错误,也许检查一下你的文件是否在正确的目录下,还有你的
.env.local
文件。这是我在以前的项目中使用的
lib/dbConnect.js
,仅供参考。