首页 > 解决方案 > Nextjs 函数在 vercel(以前称为 zeit)中的云无服务器函数中不起作用

问题描述

我正在尝试查询托管在地图集(免费层)上的 MongoDB。我正在使用 nextjs 构建 api。我尝试在 vercel(以前称为 zeit)中托管它。该代码在本地运行良好。在部署到云(vercel)时,它不起作用。

var MongoClient = require('mongodb').MongoClient;

// serverless function for proverbs of the day
export default async (req, res) => {
  return new Promise((resolve) => {
    let databaseString = process.env.DATABASE_URL;
    MongoClient.connect(
      databaseString,
      { useUnifiedTopology: true },
      async function (err, client) {
        if (err) {
          console.error(err);
          throw err;
        }

        var db = client.db('database_name');

        var start = new Date();
        start.setHours(0, 0, 0, 0);

        var end = new Date();
        end.setHours(23, 59, 59, 999);

        let result;
        try {
          // query 1 : doesn't works
          result = await db
            .collection('proverbs')
            .findOne({ createdAt: { $gt: start, $lt: end } });

          // query 2 : works
          // result = await db.collection('proverbs').findOne({'id': 11 })
        } catch (err) {
          console.error(err);
        } finally {
          client.close();
        }

        res.send(result);
        return resolve();
      },
    );
  });
};

我尝试了两个查询:查询 1 和查询 2

在本地 查询 1 和 2 都有效

在 vercel 云服务器中, 查询 1 不起作用 查询 2 起作用

我想让查询 1 工作。我哪里错了?

标签: node.jsnext.jsserverlessvercel

解决方案


问题可能来自您的机器和 Vercel 服务器之间的时区差异。建议尽可能多地使用 UTC 时间来避免此类问题。

在您的情况下,简单地使用setUTCHours而不是setHours应该在生产中为您提供与 localhost 相同的结果。


推荐阅读