当使用`mongoose.disconnect()`或`db.close()`

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

我是MongoDB的新手。现在,我正在使用Mongoose在我的express.js应用程序中处理数据库。我的问题是我不知道什么时候应该关闭连接?既然有人说最好关闭它,而有人说让它打开? db.close()mongoose.disconnect()有什么区别?您使用这些工具有什么经验?

谢谢!

node.js database mongodb express mongoose
1个回答
0
投票

打开连接并在路线/服务之间共享连接。您可以在开始表达之前初始化数据库和所有相关的架构。

import mongoose from 'mongoose';

// define models
import User from './user';
import Order from './order';

// connect to db
const connect = async () => {
  await mongoose.connect(process.env.DATABASE_URL);

  return mongoose.connection;
};

const models = { User, Order };

export { connect };

export default models;

然后在启动Express之前先连接:

import models, { connect } from './models';
...

// connect to the db
const connection = await connect();

// now pass in the models to your routes
request('./routes/users')(models);
request('./routes/orders')(models);

// or use middleware so you can access in routes like req.models.user.find({})
app.use((req, res, next) => {
  req.models = models;
  next();
})

app.listen(process.env.PORT, () =>
   console.log(`Example app listening on port ${process.env.PORT}!`),
);

您可以添加一个清理处理程序来侦听process.exit并在那里关闭连接。大致类似:

const cleanUp = (eventType) => {
  connection.close(() => {
       console.info('closed');
   });
};

[`exit`, `SIGINT`, `SIGUSR1`, `SIGUSR2`, `uncaughtException`, `SIGTERM`].forEach((eventType) => {
  process.on(eventType, cleanUp.bind(null, eventType));
})
© www.soinside.com 2019 - 2024. All rights reserved.