Configurar, abrir e fechar um realm - Node.js SDK
Nesta página
Abrir um Realm
Para abrir um Realm local (não sincronizado), passe um objeto Realm .Configuration para o método assíncrono Realm.open().
Observação
Acessando o caminho de realm padrão
Se você não especificar uma propriedade path
em seu objeto do Configuration
, o SDK criará um domínio no caminho padrão. Você pode acessar e alterar o caminho de domínio padrão utilizando a propriedade global do Realm.defaultPath
.
// Open a local realm file with a predefined Car object model const realm = await Realm.open({ schema: [Car], });
Abra um Realm sem fornecer um esquema
Após criar um domínio em um dispositivo, você pode omitir o esquema quando acessar o mesmo domínio ligando para new Realm()
. O SDK deriva o esquema da região do arquivo de região existente em Realm.defaultPath
.
Acessar um domínio sem fornecer um esquema só funciona para domínios locais. Você deve sempre passar um esquema ao usar um domínio sincronizado.
// Open the Realm with a schema const realm = new Realm({ schema: [Car] }); realm.close(); // Reopen it without a schema const reopenedRealm = new Realm();
Abrir um Realm na memória
Para criar um domínio que executa inteiramente na memória sem ser gravado em um arquivo, adicione inMemory: true
no seu objeto Realm.Configuration :
const realm = await Realm.open({ inMemory: true, schema: [Car], });
Observação
Os realms na memória podem usar espaço em disco se a memória estiver fraca, mas os arquivos criados por um realm na memória são excluídos quando você fecha o realm.
Copiar Dados e Abrir um Novo Realm
Novidades na versão 10,14,0.
Para copiar dados de um realm existente para um novo realm com diferentes opções de configuração, passe a nova configuração para o método Realm.writeCopyTo() .
Na nova configuração do realm, você deve especificar o path
.
Se você gravar a região copiada em um arquivo de região que já existe, os dados serão gravados objeto por objeto. A operação de cópia substitui objetos se já existirem objetos para determinadas chaves primárias. Os esquemas da região que você copia e da região na qual você está gravando devem ser compatíveis para que a operação de cópia seja bem-sucedida. Somente objetos nos esquemas de ambas as configurações são copiados.
A alteração da configuração pode incluir modificações no SyncConfiguration:
Região local para região sincronizada
Realm sincronizado com o domínio local
Realm sincronizado com um Realm sincronizado para um usuário diferente
Observação
Somente sincronização baseada em partição
Esse método oferece suporte apenas à conversão entre um realm não sincronizado e a sincronização baseada em partição. Se seu aplicativo usa a Flexible Sync, você deve iterar manualmente pelos objetos em um território e copiá-los para o outro realm.
Observação
Somente sincronização do mesmo tipo
Esse método oferece suporte apenas à cópia de uma configuração de Partition-Based Sync para outro usuário de Partition-Based Sync ou uma configuração de Flexible Sync para outro usuário de Flexible Sync. Você não pode usar esse método para converter entre um Partition-Based Sync realm e um Flexible Sync realm ou vice-versa.
A alteração de configuração também pode incluir alterações na propriedade encryptionKey
do Configuration
:
Realm criptografado para realm não criptografado
Realm não criptografado para domínio criptografado
Exemplo
Converter realm local em realm sincronizado
const localConfig = { schema: [Car], path: "localOnly.realm", }; const localRealm = await Realm.open(localConfig); const syncedConfig = { schema: [Car], path: "copyLocalToSynced.realm", sync: { user: app.currentUser, partitionValue: "myPartition", }, }; localRealm.writeCopyTo(syncedConfig); const syncedRealm = await Realm.open(syncedConfig);
const localConfig: Realm.Configuration = { schema: [Car], path: "localOnly.realm", }; const localRealm = await Realm.open(localConfig); const syncedConfig: Realm.Configuration = { schema: [Car], path: "copyLocalToSynced.realm", sync: { user: app.currentUser!, partitionValue: "myPartition", }, }; localRealm.writeCopyTo(syncedConfig); const syncedRealm = await Realm.open(syncedConfig);
Você também pode combinar alterações na configuração. Por exemplo, você pode abrir um realm criptografado local como um realm não criptografado sincronizado ou um realm sincronizado não criptografado como um realm sincronizado criptografado.
Exemplo
Converter Criptografia Sincronizada em Realm Não Criptografado Local
// Create a secure key. const encryptionKey = new Int8Array(64); // ... store key const syncedEncryptedConfig = { schema: [Car], path: "syncedEncrypted.realm", sync: { user: app.currentUser, partitionValue: "myPartition", }, encryptionKey, }; const syncedEncryptedRealm = await Realm.open(syncedEncryptedConfig); const localUnencryptedConfig = { schema: [Car], path: "copyLocalUnencrypted.realm", }; syncedEncryptedRealm.writeCopyTo(localUnencryptedConfig); const localUnencryptedRealm = await Realm.open(syncedEncryptedConfig);
// Create a secure key. const encryptionKey = new Int8Array(64); // ... store key const syncedEncryptedConfig: Realm.Configuration = { schema: [Car], path: "syncedEncrypted.realm", sync: { user: app.currentUser!, partitionValue: "myPartition", }, encryptionKey, }; const syncedEncryptedRealm = await Realm.open(syncedEncryptedConfig); const localUnencryptedConfig: Realm.Configuration = { schema: [Car], path: "copyLocalUnencrypted.realm", }; syncedEncryptedRealm.writeCopyTo(localUnencryptedConfig); const localUnencryptedRealm = await Realm.open(syncedEncryptedConfig);
Fechar um Realm
É importante lembrar de chamar o método close()
quando terminar com uma instância de realm para evitar vazamentos de memória.
realm.close();
Usar um proxy HTTP
O Realm Node.js SDK tem suporte limitado para execução atrás de um proxy HTTP.
Requisitos
Realm SDK do Node.js. v10,3,0 ou posterior.
NPM CLI v6.9.0 ou posterior é necessário.
Limitações
Você deve instalar o fetch-with-proxy pacote manualmente.
As conexões HTTPS do cliente para o servidor proxy não são permitidas. A URL especificada em
HTTPS_PROXY
deve começar comhttp://
.Você deve definir uma variável de ambiente do
HTTPS_PROXY
. O proxy não pode ser configurado no tempo de execução ou por aplicativo.
Instalar fetch-with-proxy
Uma etapa manual é exigida para trocar o pacote node-fetch
utilizado pela camada de transporte de rede.
Após instalar o Realm Node.js SDK, execute o seguinte comando para instalar um pacote diferente no pacote Network Transport:
npm install node-fetch@npm:fetch-with-proxy --prefix node_modules/realm-network-transport
Definir HTTPS_PROXY e executar um script
Você pode executar um arquivo de script arbitrário ao rotear todas as solicitações do Realm JS por meio de um proxy HTTP.
Em um sistema Unix, você pode prefixar a atribuição de uma variável de ambiente antes do comando:
HTTPS_PROXY=http://127.0.0.1:3128 node index.js