mongodb - 没有 Mongoose 的 Express 和 MongoDB

标签 mongodb express

这与其说是一个问题,不如说是一个咨询请求。我找不到资源来检查我的方法的有效性,所以我想听听 MongoDB 专家的意见。

我在玩弄 MongoDB 并想出了这个中间件方法来将客户端传递到我的路由。我有这个 Express 中间件:

const addClientToRequest = async (req, _, next) => {
  const client = new MongoClient(uri);
  await client.connect();
  req.client = client;
  next();
};

app.use(addClientToRequest);

之后,我在路由中使用 req.client 来访问我的数据库。

app.get("/:id", async (req, res) => {
  const client = req.client;
  const id = req.params.id;
  try {
    const data = await client.db("mydb").collection("mycollection").findOne({ id });
    if (data) return res.status(200).json(data);
  } catch (error) {
    return res
      .status(500)
      .json({ message: "Error fetching requested data", error });
  }
  return res.status(404).json({ message: "Requested data cannot be found" });
});

这种方法会有什么问题?这样用MongoDB客户端可以吗?

最佳答案

根据我的经验,我们总是定义一个单独的实用程序来在应用程序启动时加载连接池,然后重用这些连接。

在上述方法中,您似乎为发出的每个 HTTP 请求创建一个新连接,然后不终止(或)关闭连接。这对于大型应用来说可能代价高昂。

db.util.js

const { MongoClient } = require("mongodb");

const uri = `mongodb://${process.env.DB_USER}:${process.env.DB_PASSWORD}@localhost:27017/${process.env.DATABASE}?maxPoolSize=2-&w=majority`;

const client = new MongoClient(uri);

const init = async () => {
  try {
    await client.connect();
    console.log("Connected");
  } catch (error) {
    console.log(error);
  }
};

const getClient = () => {
  return client;
};

module.exports.init = init;
module.exports.getClient = getClient;

app.js

//Import modules
require("dotenv").config({ path: __dirname + "/.env" });
const express = require("express");
const dogRoutes = require("./routes/dog.routes");
const db = require("./utils/db.util");

// Define PORT for HTTP Server
const PORT = 9900;

// Initialize Express
const app = express();

app.use(express.json());
app.use(dogRoutes);

(async () => {
  await db.init();

  app.listen(PORT, (err) => {
    console.log(`Server is up at localhost ${PORT}`);
  });
})();

关于mongodb - 没有 Mongoose 的 Express 和 MongoDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71899948/

相关文章:

node.js - Nodejs EJS 辅助函数?

node.js - 无法使用Node JS/Express JS和Postman获取POST数据

javascript - $lookup 返回空数组

java - 由于在 EC2 实例上使用了所有内存,MongoDB 性能变慢

php - MongoDB + PHP Item 不会删除()?

javascript - 将数据发送到 ExpressJS 服务器以渲染新 View

javascript - 对象匹配的返回值

ruby-on-rails - Mongoid 在父级内部创建嵌入文档

php - 找不到一对多的 Laravel 类

javascript - Node JSON 输出格式错误,无法设置 HTTP header : Content-Length to fix