【问题标题】:Nextjs MongoDB template: clientPromise is not a functionNextjs MongoDB 模板:clientPromise 不是函数
【发布时间】:2022-01-06 02:38:52
【问题描述】:

我正在使用 Next.js 的 MongoDB 示例模板,它带有一个 MongoDB util 函数:

import { MongoClient } from 'mongodb';

const uri = process.env.MONGODB_URI;
const options = {};

let client;
let clientPromise;

if (!process.env.MONGODB_URI) {
  throw new Error('Please add your Mongo URI to .env.local');
}

if (process.env.NODE_ENV === 'development') {
  if (!global._mongoClientPromise) {
    client = new MongoClient(uri, options);
    global._mongoClientPromise = client.connect();
  }
  clientPromise = global._mongoClientPromise;
} else {
  client = new MongoClient(uri, options);
  clientPromise = client.connect();
}
export default clientPromise;

这是我的使用方法,我确定我使用不正确。

import { clientPromise } from '../../lib/mongodb';

export default async (req, res) => {
  try {
    const db = await clientPromise();
    const users = await db.collection('users').find({}).limit(20).toArray();
    res.json(users);
  } catch (e) {
    console.error(e);
    res.json({ error: 'Not connected!' });
  }
};

错误是“TypeError: (0 , lib_mongodb__WEBPACK_IMPORTED_MODULE_0_.clientPromise) is not a function”

【问题讨论】:

    标签: node.js mongodb next.js


    【解决方案1】:

    您正在导出clientPromise,即client.connect()。此时您已经“触发”了连接功能。现在你所要做的就是等待那个承诺,

    所以不是

    const db = await clientPromise();
    

    你应该这样做:

    const connection = await clientPromise; // this is a client connection not a db
    const db = connection.db();
    

    【讨论】:

      猜你喜欢
      • 2022-07-20
      • 2020-11-05
      • 2023-01-14
      • 1970-01-01
      • 2021-05-30
      • 1970-01-01
      • 2010-12-08
      • 1970-01-01
      相关资源
      最近更新 更多