节点性别
主要是浅薄的包装 eXist 的 XML- RPC API 财务报告和审定财务报表 (原始内容存档于2013-10-12). eXist's REST API。 。 。 . 试图将名词翻译为节点世界. 用承诺.
安装
npm install @existdb/node-exist
注: 如果您正在寻找命令行客户端, 请查看 页:1
使用
除了eXist-db的XML-RPC API外,您现在还可以选择 利用它的潜力. 这样就可以为任何特定任务选择最佳工具. 两个API都用于组合 上传示例。 。 。 .
注: 这一一揽子措施现在仅是无害环境管理.
资源
状态:不稳定
注: eXist-db的REST-API有其方法和现有备选方案
不同的情况可能不同。 特别是能力
下载 QQuery 文件的源代码
默认禁止( e)_source=yes 只有在启用于 descriptor.xml) (中文(简体) ).
详细情况 options 请参看 REST-API 文档
首先,我们需要一个休息的例子.
import { getRestClient } from '@existdb/node-exist'
const rc = getRestClient()
更多信息另见 连接选项。 。 。 .
返回的 HTTP 客户端有 4 个方法
-
post(query, path[, options]): 执行query二、在增进和保护人权方面path。 。 。 . 这个query预计将是一个 QQury 主模块, 并将被包裹在存在的 XML- flagment 中.const { bodyText } = await rc.post('count(//p)', '/db') console.log(bodyText) -
put(data, path): 在数据库中创建资源. 如果路径中的子集缺失,它们将被创建给你. 服务器将使用状态代码400, Bad Request, 为不.. 组成 XML 资源。 在这种情况下,尸体包含一个详细的 描述验证错误.await rc.put('<root />', '/db/rest-test/test.xml') -
get(path [, options][, writableStream]):从数据库读取数据. 响应机构将包含资源内容或 文件列表,如果提供的路径是收藏. 如果一个可写字的Stream被传入,反应体会被流入其中.const { bodyText } = await rc.get('/db/rest-test/test.xml') console.log(bodyText) -
del(path): 从已存在的db 实例中删除资源和收藏await rc.del('/db/rest-test/test.xml')
来看看 剩余客户实例。 。 。 . REST客户使用 明白了吗 图书馆 并用流水和发电机工作. 看这个 休息测试 以看到实例.
XML - RPC 相机
创建、阅读和删除收藏 :
import { getXmlRpcClient } from '@existdb/node-exist'
const db = getXmlRpcClient()
db.collections.create('/db/apps/test')
.then(result => db.collections.describe('/db/apps/test'))
.then(result => console.log('collection description:', result))
.catch(e => console.error('fail', e))
将 XML 文件上传到数据库
import { getXmlRpcClient } from '@existdb/node-exist'
const db = getXmlRpcClient()
db.documents.upload(Buffer.from('<root/>'))
.then(fileHandle => db.documents.parseLocal(fileHandle, '/db/apps/test/file.xml'))
.then(result => db.documents.read('/db/apps/test/file.xml'))
.then(result => console.log('test file contents', result))
.catch(error => console.error('fail', error))
由于与数据库的所有交互都是承诺,您也可以使用同源函数
import { getXmlRpcClient } from '@existdb/node-exist'
const db = getXmlRpcClient()
async function uploadAndParse (filePath, contents) {
const fileHandle = await db.documents.upload(contents)
await db.documents.parseLocal(fileHandle, filePath, {})
return filePath
}
try {
const filePath = await uploadAndParse('/db/apps/test-file.xml', Buffer.from('<root/>'))
console.log("uploaded", filePath)
} catch (error) {
console.error(error)
}
你也可以看看这个 实例 更多的用例.
连接选项
在上一节中,你了解到有两个 API 您可以用来与存在db 实例交互 .
两种客户端构造函数都接受类型选项参数
NodeExistConnectionOptions。 。 。 .
毫无论据地召唤他们,如上述例子将使用
默认选项.
{
basic_auth: {
user: 'guest',
pass: 'guest'
},
protocol: 'https:',
host: 'localhost',
port: '8443',
path: '/exist/rest'|'/exist/xmlrpc'
}
注: 这个 path 属性,到达 API 的终点,
对 REST 不同('/exist/rest')和XML-RPC('/exist/xmlrpc') (中文(简体) ).
你很可能不需要改变它。 不过,如果你需要的话
让你可以控制这些.
含有默认值的 REST 客户端
import { getRestClient } from '@existdb/node-exist'
const rest = getRestClient({
basic_auth: {
user: 'guest',
pass: 'guest'
},
protocol: 'https:',
host: 'localhost',
port: '8443',
path: '/exist/rest'
})
默认的 XmlRpc 客户端
import {getXmlRpcClient} from '@existdb/node-exist'
const db = getXmlRpcClient({
basic_auth: {
user: 'guest',
pass: 'guest'
},
protocol: 'https:',
host: 'localhost',
port: '8443',
path: '/exist/xmlrpc'
})
实例
-
联系人不是客人
{ basic_auth: { user: 'me', pass: '1 troubadour artisanal #compost' } } -
连接到 a 地方发展 使用 HTTP 的服务器
{ protocol: 'http:', port: 8080 } -
连接到服务器 无效 或者说 过期 证书.
{ host: 'here.be.dragons', rejectUnauthorized: false }注: 对于远程主机来说,此考虑 不良做法 因为它只是 提供虚假的安全感. 对于被认为是本地的主机 -
localhost, (中文(简体) ),127.0.0.1财务报告和审定财务报表[::1]- 说吧 这是自动设置的, 因为不可能有信任的证书 用于本地主机. -
放弃需要超过十分钟的请求
{ timeout: 600000 }timeout以毫秒计,既适用于等待响应 标题和两块反应体之间的暂停. 默认,0,无限期等待,所以运行中的查询不会被剪切 由客户关闭。 查询和RESTpost接受一个timeout中标 选项,用于一个单调. 软件包操作db.app.*从来没有时间.
从环境读取选项
readOptionsFromEnv 提供了阅读连接选项的舒适方式
从一组环境变量中
| 变量名称 | 默认 | 说明 |
|---|---|---|
EXISTDB_USER | 无 | 用户用于连接数据库并使用 |
EXISTDB_PASS | 无 | 在数据库中认证用户的密码 |
EXISTDB_SERVER | https://localhost:8443 | 要连接到的数据库实例的 URL( 只允许 http 和 https 协议) |
EXISTDB_TIMEOUT | 无 (无限期等待) | 毫秒前,请求时间结束, 0 无限期等待 |
注: 作为用户以外的一个实例连接 guest
两者 EXISTDB_USER 财务报告和审定财务报表 EXISTDB_PASS 必须准备好!
import {getXmlRpcClient, getRestClient, readOptionsFromEnv} from '@existdb/node-exist'
const db = getXmlRpcClient(readOptionsFromEnv())
const rest = getRestClient(readOptionsFromEnv())
更多细节,请查看如何使用 连接脚本 用于测试和全部测试 示例脚本。 。 。 .
构成部分
这个 XML - RPC 相机 命令按其运行对象分组为组件. 每个方法都回报一个承诺.
查询
状况:工作
execute, (中文(简体) ), read 财务报告和审定财务报表 readAll 接受一个 timeout 内 options输入
毫秒( 毫秒)0 (无限制地等待)。 它超越了连接
超时 仅用于此查询,而不发送到
数据库.
db.queries.readAll(query, { variables, timeout: 0 })
执行
db.queries.execute(query, options)
读取
db.queries.read(query, options)
全部读取
此便利函数调用查询 。 计数后检索所有结果页面,并在数组中返回.
db.queries.readAll(query, options)
示例
const query = `xquery version "3.1";
xmldb:get-child-collections($collection)
=> string-join(",\n")
`
const options = { variables: collection: "/db/apps" }
db.queries.readAll(query, options)
.then(result => {
const response = Buffer.concat(result.pages).toString()
console.log(response)
})
.catch(error => console.error(error))
计数
db.queries.count(resultHandle)
检索
db.queries.retrieveResult(resultHandle, page)
全部检索
db.queries.retrieveAll(resultHandle)
释放
服务器上的免费结果
db.queries.releaseResult(resultHandle)
文档
文档可以被视为文件. 如果它的类型不是二进制的话, 它可能会被索引 .
上传
解析为文件控件,然后可以被 db.documents.parseLocal。 。 。 .
db.documents.upload(Buffer.from('test'))
解析本地语言
db.documents.parseLocal(fileHandle, 'foo/test.txt')
读取
读取存储为 XML 的资源 (S)XMLResource) (中文(简体) ). 你可以控制他们
按设置序列化
序列化选项
在选项参数中.
使用默认序列化选项 .
db.documents.read('foo.xml')
强制 XML 声明要返回 .
db.documents.read('foo.xml', { "omit-xml-declaration": "no" })
强制文件以一行空行结尾( 自 eXist- db v 6. 0.
db.documents.read('foo.xml', { "insert-final-newline": "yes" })
已读
读取存储为二进制的资源( R)BinaryResource内在存在,如" ",
文本文件、PDF、CSS、图像等.
db.documents.readBinary('foo.xml')
删除
db.documents.remove('foo.xml')
资源
状况:工作
在数据库中,资源按其路径确定. 文档 财务报告和审定财务报表 收藏是资源.
说明
db.resources.describe(resourcePath)
设置
db.resources.setPermissions(resourcePath, 400)
获得许可
db.resources.getPermissions(resourcePath)
收款
状况:工作
创建
db.collections.create(collectionPath)
删除
db.collections.remove(collectionPath)
说明
db.collections.describe(collectionPath)
读取
db.collections.read(collectionPath)
已存在
此函数检查收藏是否存在 .
- 返回时
true如果收藏已存在且当前用户可以打开 - 返回时
false如果收藏不存在 - 如果收藏已存在但当前用户无法执行,则丢弃例外 打开它
db.collections.exists(collectionPath)
已存在并可以打开
此函数检查收藏是否存在, 如果确实存在, 如果当前用户可以访问它 .
- 返回时
true如果收藏已存在且当前用户可以打开 - 返回时
false如果收藏不存在 - 如果收藏已存在但当前用户无法执行,则丢弃例外 打开它
db.collections.existsAndCanOpen(collectionPath)
应用
状况:工作
上传
上传 XAR后可以安装
db.app.upload(xarBuffer, xarName)
示例
const xarContents = fs.readFileSync('spec/files/test-app.xar')
db.app.upload(xarContents, 'test-app.xar')
.then(result => console.log(result))
.catch(error => console.error(error))
安装
安装上传的 XAR( 这将调用 repo:install-and-deploy-from-db) (中文(简体) ).
为额外安全起见,先前安装的版本将在前被移除
安装新版本 .
依赖性将从 http://sexual-db.org/sexual/apps/public-repo 互联网档案馆的存檔,存档日期2013-12-22
默认.
如果您想要使用不同的寄存器, 则提供可选 customPackageRepoUrl。 。 。 .
db.app.install(xarName[, customPackageRepoUrl])
示例
db.app.install('test-app.xar')
.then(result => console.log(result))
.catch(error => console.error(error))
回返
{
"success": true,
"result": {
"update": false, // true if a previous version was found
"target": "/db/apps/test-app"
}
}
错误
{
success: false,
error: Error
}
删除
卸载 财务报告和审定财务报表 删除其命名空间 URL 识别的应用程序.
如果没有应用 packageUri 由此可以发现,这是成功的.
db.app.remove(packageUri)
示例
db.app.remove('http://exist-db.org/apps/test-app')
.then(result => console.log(result))
.catch(error => console.error(error))
回返
{ success: true }
错误
{
success: false,
error: Object | Error
}
软件包收集
节点- 存在将上传的收藏路径
软件包改为(/db/pkgtmp) (中文(简体) ). 用于清理
相助安设.
示例
db.documents.remove(`${db.app.packageCollection}/test-app.xar`)
指数
状态: 待办
用户
状况:工作
获取用户信息
将返回给定用户的信息 .
db.users.getUserInfo(username)
示例
db.users.getUserInfo('admin')
回返情况:
{
uid: 1048574,
'default-group-id': 1048575,
umask: 18,
metadata: {
'http://exist-db.org/security/description': 'System Administrator',
'http://axschema.org/namePerson': 'admin'
},
'default-group-name': 'dba',
'default-group-realmId': 'exist',
name: 'admin',
groups: [ 'dba' ],
enabled: 'true'
}
列表
db.users.list()
返回一组用户信息对象(见 获取用户信息 ()) (中文(简体) ).
服务器
状况:工作
版本
查询运行在服务器上的 eXist-db 版本 .
返回 SemVer 版本为字符串(例如:. 5.4.1 或者说 6.1.0-SNAPSHOT) (中文(简体) ).
db.server.version()
同步到磁盘
db.server.syncToDisk()
关闭
db.server.shutdown()
注:无道再提.
命令行脚本
您可以使用此库来构建一个命令行界面,与已存在的b实例相互作用. 几个基本 实例 如何做到这一点将包含在这个寄存器中.
示例
spec/examples/exist-ls /db/apps
注: 来看看 页:1 对于一个CLI客户端 建立节点-性别.
测试
所有测试都在 光谱/测试 并写入 磁带
npm test
注: 您可以覆盖环境变量的连接设置 。 见 实例 更多信息.
要使用不同的服务器执行单个运行, 您也可以直接定义变量 :
EXISTDB_SERVER=http://localhost:8888 npm test
路线图
- 切换到使用 eXist-db 的 REST- API( 可通过 休息客户(中文(简体) )
- 重建ES6模块
- 更好的类型提示
兼容性
节点性别 测试与 eXist-db、4、5和6。 。 。 . 除XAR安装外,它应该与第3版相兼容.
免责声明
自己冒险使用.
这个软件是安全的开发. 它可能被用于与生产实例合作,但在你的数据丢失前再三思考.