如何通过Orient JS获取OrientDB服务器中的所有数据库名称?
解决Orient JS获取具体数据库名称的问题
我之前也碰到过这个情况!你只拿到数据库总数,大概率是因为没正确处理server.list()返回的Promise对象,直接操作它当然拿不到实际的数据库列表。下面是两种可靠的方法来获取具体的数据库名称:
1. 使用Async/Await(推荐,代码更易读)
首先确保你的Node.js环境支持async/await(Node.js 8+就没问题),然后按以下步骤来:
const OrientDB = require('orientjs'); // 初始化服务器连接 const server = OrientDB({ host: 'localhost', // 你的OrientDB服务器地址 port: 2424, // 默认端口 username: 'root', // 有足够权限的账号 password: 'your-password' // 对应密码 }); async function fetchDatabaseNames() { try { // 等待Promise解析,拿到数据库对象数组 const dbList = await server.list(); // 从每个数据库对象中提取name属性 const dbNames = dbList.map(db => db.name); console.log('所有数据库名称:', dbNames); // 这里可以把dbNames用于后续业务逻辑 } catch (error) { console.error('获取数据库列表出错:', error.message); } finally { // 记得关闭服务器连接,避免资源泄漏 await server.close(); } } // 执行函数 fetchDatabaseNames();
2. 使用Promise的Then/Catch回调
如果你习惯传统的Promise链式调用,也可以这样写:
const OrientDB = require('orientjs'); const server = OrientDB({ host: 'localhost', port: 2424, username: 'root', password: 'your-password' }); server.list() .then(dbList => { const dbNames = dbList.map(db => db.name); console.log('所有数据库名称:', dbNames); }) .catch(error => { console.error('获取数据库列表失败:', error.message); }) .finally(() => { // 关闭连接 server.close(); });
关键说明
server.list()返回的是一个Promise,它会在成功时解析为一个包含数据库对象的数组,每个对象包含name、storageType、status等属性。- 如果你之前直接打印
server.list(),看到的其实是Promise对象,而不是实际的数组,这就是为什么你只拿到了“长度”(可能是误操作了Promise对象的某个属性)。 - 确保使用的账号有足够权限访问服务器级别的数据库列表(root账号默认拥有这个权限)。
内容的提问来源于stack exchange,提问作者Amin Baig
相关产品推荐
相关产品推荐

