adminjs备份数据库
AdminJS 7 提供了一个模块化的插件 adminjs-plugin-mongoose
来与 Mongoose 集成,您可以使用该插件来轻松备份 MongoDB 数据库。以下是基本的使用步骤:
- 安装
adminjs-plugin-mongoose
插件:
npm install adminjs-plugin-mongoose
- 在 AdminJs 中引入
adminjs-plugin-mongoose
并注册到 AdminJS application 实例中。例如:
const mongoose = require('mongoose');
const AdminJS = require('adminjs');
const adminjsMongoose = require('adminjs-plugin-mongoose');
const MONGO_URI = 'mongodb://localhost:27017/test';
const connectDB = async () => {
try {
await mongoose.connect(MONGO_URI, { useNewUrlParser: true });
console.log('MongoDB connected…');
} catch (err) {
console.log(err);
}
}
connectDB();
const User = mongoose.model('User', {
email: String,
password: String,
});
AdminJS.registerAdapter(require('adminjs-mongoose'));
const adminJsOptions = {
resources: [User],
};
const adminJs = new AdminJS(adminJsOptions);
app.use(adminJs.options.rootPath, adminJs.options.router);
在调用 adminJsOptions
时,User 向 resource 数组中添加两个属性:email 和 password。这就是我们将要备份的集合。
- 创建一个新的路由 handler 来处理备份请求,备份到指定的目录。例如:
const fs = require('fs');
const os = require('os');
const path = require('path');
const rimraf = require('rimraf');
const carbone = require('carbone');
const moment = require('moment');
app.get('/backup', async (req, res) => {
const backupFolder = fs.mkdtempSync(
path.join(os.tmpdir(), 'adminjs-backup-'));
// Create a new folder with a unique path name
console.log('Backup in folder:', backupFolder);
try {
await User.backup(backupFolder);
const fileName = `User-${moment().format('YYMMDD_HHmmss')}.zip`;
const filePath = path.resolve(path.join(backupFolder, '..', fileName));
Carbone.render(path.join(__dirname, '../views/backup.odt'), { filename: fileName })
.then(async (result) => {
fs.writeFileSync(filePath, result);
res.download(filePath);
console.log('File downloaded successfully.');
});
} catch (error) {
console.log(error);
rimraf.sync(`${backupFolder}/*`);
res.status(400).send({
message: error.message,
});
}
});
在上述 JavaScript 代码中,我们创建了一个新的路由处理程序,该处理程序创建一个临时文件夹,并在其中备份 User 集合。随后,我们使用 Rimraf 删除原始临时文件夹,以保持电脑磁盘空间的干净整洁。
- 在 AdminJS ui 上绑定生成的 download 请求,以便直接请求下载备份数据,并进行保存。例如:
const { exposeAction } = require('@adminjs/express');
...
adminJs.route({
method: 'GET',
path: '/backup-data',
handler: exposeAction('backup', (req, res, context) => {
return {
...context,
record: {},
}
},
), // Pass the user collection to the backup action
});
这部分代码是在 AdminJS 实例之后进行的,我们将 backup
的操作方法暴露为一个 /backup-data
(可替换) 的 Express 路由。
最后,在 adminjs ui 上创建一个按钮,触发 GET 请求:
{
components: [{
name: 'Download Backup',
type: 'Button',
props: {
as: 'a',
target: '_blank',
href: '/admin/backup-data',
},
isVisible:{ $is: {'..navigation.main': 'Data'}},
}],
},
在以上 JavaScript 代码中,我们成功将名为“Download Backup”的按钮添加到 AdminJS UI 的主菜单中,并设置了与刚才定义的路由相对应的 HTTPS GET 映射关系。
这是您的 AdminJS 7 数据库备份所需的全部步骤。该示例可实现以下操作:
安排从 MongoDB 的 User 集合中备份数据
给定一个或多个按钮上,通过 AdminJS UI 触发备份操作,并在备份完成后下载备份文件
总结:使用 adminjs-plugin-mongoose 模块,您可以轻松地将 MongoDB 数据库备份到本地硬盘或云端存储区域,以保证对系统数据的可靠性和持续访问能力。获取过程需要仔细审查,同时理解如何调用 Mongoose API 来执行数据库备份并存储结果,以此来达到安全备份和快速恢复丢失的数据的目的。
adminjs备份数据库