Menu Docs
Página inicial do Docs
/ /
Atlas Device SDKs
/ /

Configurar, abrir e fechar um realm - Node.js SDK

Nesta página

  • Abrir um Realm
  • Abra um Realm sem fornecer um esquema
  • Abrir um Realm na memória
  • Copiar Dados e Abrir um Novo Realm
  • Fechar um Realm
  • Usar um proxy HTTP
  • Requisitos
  • Limitações
  • Instalar fetch-with-proxy
  • Definir HTTPS_PROXY e executar um script

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],
});

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();

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.

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);

Dica

Veja também:

É importante lembrar de chamar o método close() quando terminar com uma instância de realm para evitar vazamentos de memória.

realm.close();

O Realm Node.js SDK tem suporte limitado para execução atrás de um proxy HTTP.

  • Realm SDK do Node.js. v10,3,0 ou posterior.

  • NPM CLI v6.9.0 ou posterior é necessário.

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

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

Voltar

Arquivos Realm