504 尝试从 Vercel 部署访问 MongoDB 集合时网关超时

问题描述 投票:0回答:1

我有一个具有以下结构的基本 NodeJS 项目:

/configs
  db.config.js
/routes
  testRoutes.js
index.js
vercel.json

服务器所在的index.js如下所示:

const express = require('express');
const connectToDb = require('./configs/db.config');
const cors = require('cors');
const path = require('path');
const testRouter = require('./routes/testRoutes');
const app = express();
const PORT = process.env.PORT || 5000;

app.use(cors());
app.use(express.json());
app.use('/', express.static(path.join(__dirname, '/public')));

app.use('/test', testRouter.getUsers);

connectToDb()
  .then((res) => {
    app.listen(PORT, () => {
      console.log(`Server is running on port: ${PORT}`);
    });
  })
  .catch((err) => {
    console.log(err);
  });

module.exports = app;

db.config.js 连接到数据库一次并导出以在需要时使用:

const {MongoClient} = require('mongodb');
const uri = `mongodb+srv://${process.env.DB_USER}:` +
            `${process.env.DB_PASSWORD}@${process.env.DB_CLUSTER_URL}/` +
            `?retryWrites=true&w=majority&appName=${process.env.DB_APP_NAME}`;
const client = new MongoClient(uri);

let database;

const connectToDb = async () => {
  if (database) {
    return database;
  }
  try {
    await client.connect();
    console.log('Connected to MongoDB');
    database = client.db(process.env.DB_NAME);
    return database;
  } catch (error) {
    console.log(error);
  }
};

module.exports = connectToDb;

除此之外,在服务器中我有一个

/test
路由,当访问该路由时,它会调用一个函数来从名为
users
的 mongo 数据库集合中检索所有记录:

const connectToDb = require('../configs/db.config');

const getUsers = async (req, res) => {
  try {
    let db = await connectToDb();
    const collection = db.collection(process.env.DB_COLLECTION);
    const data = await collection.find({}).toArray();
    res.send(data);
  } catch (error) {
    console.error('Error accessing the database', error);
    res.status(500).send('Failed to fetch data');
  }
};

module.exports = {
  getUsers,
};

当我在本地运行此命令时,转到

http:localhost:5000/test
后,数据库记录(因为现在只有一条)显示在窗口中,但是如果我在转到
/test
时将其部署到 Vercel 项目,则会出现网关超时: enter image description here

我对使用 Vercel 相当陌生,但从日志中我似乎没有得到太多信息: enter image description here 有人遇到过这个问题吗?如果有帮助,vercel.json 配置是这样的:

{
  "version": 2,
  "builds": [{
      "src": "index.js",
      "use": "@vercel/node"
  }],
  "routes": [{
      "src": "/(.*)",
      "dest": "index.js"
  }]
}

我对 MongoDB 也不是那么了解,所以我不确定这是否可能是一个访问问题,即使它是 504 错误,但也许我缺少一些配置来允许对我部署的 Vercel 实例进行设置?如果您知道可能出了什么问题,请告诉我。

node.js mongodb vercel
1个回答
0
投票

经过一番搜索,我发现我遇到的错误是因为需要与 Vercel 进行 MongoDB 集成,即通过以下链接:https://vercel.com/integrations/mongodbatlas 并按照步骤通过选择我的后端项目,我创建的 MongoDB 数据库,并且允许连接。虽然一开始它失败了,但这是因为经过一些重构后,我更改了分配集成的用户的密码。在 Vercel 应用程序的环境变量中相应地更改此变量就可以解决问题

© www.soinside.com 2019 - 2024. All rights reserved.