node.js - 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 工作。我哪里错了?
解决方案
问题可能来自您的机器和 Vercel 服务器之间的时区差异。建议尽可能多地使用 UTC 时间来避免此类问题。
在您的情况下,简单地使用setUTCHours
而不是setHours
应该在生产中为您提供与 localhost 相同的结果。
推荐阅读
- eclipse - Wildfly 在 Eclipse 中以调试模式运行时停止
- raku - 重新编译 nqp 后`缺少或错误的依赖版本`
- php - 将 foreach 变成 json 数组
- plc - DB_ANY 作为 Plc 数据类型
- flutter - 如何在 Dart 中获取星期几的名称
- hyperledger-fabric - Hyperledger Composer 查询处理器函数返回一个空白数组
- python - 用 python opencv 检测圆 - 霍夫变换
- c# - 统一变换,位置
- mysql - mySQL:创建表时无法添加外键约束
- java - Spring 5 Webclient 处理 500 错误并修改响应