boa tarde refiz todos os passos e vi as solicitacao para conferir os passo como solicitado na topico anterior


Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
boa tarde refiz todos os passos e vi as solicitacao para conferir os passo como solicitado na topico anterior


Olá Everton.
Não entendi sua duvida.
Pode explicar melhor o que está tentando fazer.
Aguardo seu feedback.
ao fazer os passo o json esta retornando em branco nao retorna as informacoes
Ola amigo.
Vou tentar lhe ajudar.
Essas variáveis (process.env.DB_USER, process.env.DB_PASSWORD, process.env.CONNECT_STRING) são lidas do arquivo .env, que deveria conter suas credenciais de conexão com o banco.
Como elas estão undefined, o Node.js não está conseguindo autenticar no Oracle Database e então ele não acessa a coleção “clientes”.
Crie (ou edite) o arquivo .env na raiz do seu projeto
Exemplo de conteúdo:
DB_USER=ADMIN
DB_PASSWORD=SuaSenhaDoBancoAqui
CONNECT_STRING=g9e77c5570f9dab-doguitodb.adb.sa-saopaulo-1.oraclecloudapps.com:1522/********_high.adb.oraclecloud.com
Vá até o Autonomous Database no OCI.
Clique no nome do banco (ex: doguitodb).
Clique em Database Connection.
Escolha “Instance Walletless Connection (mTLS)” e copie o campo Connection String (por exemplo, termina com _high.adb.oraclecloud.com).
No seu código Node.js, garanta que o .env está sendo lido
No início do seu server.js ou cliente-service.js, adicione:
require('dotenv').config();
Reinicie o servidor Node
Depois de salvar o .env, pare e inicie novamente:
node server.js
Agora, no log, você deve ver algo como:
process.env.DB_USER: ADMIN
process.env.DB_PASSWORD: ****
process.env.CONNECT_STRING: g9e77c5570f9dab...
Criando pool de conexões...
Listening on port 3000
Teste o endpoint novamente
Acesse no navegador ou via curl:
http://168.138.151.172:3000/clientes
Se tudo estiver correto, deve retornar:
[
{
"_id": "609bbc8e0aeb66ab3df892f",
"nome": "Paulo Teste",
"email": "paulo@gmail.com"
}
]
Analisa ai e me retorne o resultado.
Bons estudos.
o meu ja fiz isso ja configurei e testei diversas vezes
o projeto foi terminado so o json que nao retorna tudo isso eu ja criei mas o json ainda continua retornando []
Não desista ainda amigo....
Tenho ainda algumas balas...
O driver oracledb da Oracle não lê coleções JSON automaticamente como tabelas SQL .
Você precisa usar a API SODA (Simple Oracle Document Access) para buscar os documentos.
Se o seu código usa algo como:
const result = await connection.execute('SELECT * FROM clientes');
ele vai retornar vazio ([]), porque clientes é uma coleção JSON, não uma tabela relacional.
Tente este modelo no seu arquivo cliente-service.js (ou no serviço que faz o GET /clientes):
const oracledb = require('oracledb');
require('dotenv').config();
async function listarClientes() {
let connection;
try {
connection = await oracledb.getConnection({
user: process.env.DB_USER,
password: process.env.DB_PASSWORD,
connectString: process.env.CONNECT_STRING
});
// Obter o SODA database
const soda = connection.getSodaDatabase();
// Acessar a coleção JSON "clientes"
const collection = await soda.openCollection('clientes');
// Buscar todos os documentos
const docs = await collection.find().getDocuments();
// Converter os documentos para JSON
const clientes = docs.map(d => d.getContent());
return clientes;
} catch (err) {
console.error('Erro ao listar clientes:', err);
return [];
} finally {
if (connection) {
try {
await connection.close();
} catch (err) {
console.error('Erro ao fechar conexão:', err);
}
}
}
}
module.exports = { listarClientes };
E no seu controller (por exemplo):
const express = require('express');
const router = express.Router();
const { listarClientes } = require('../services/cliente-service');
router.get('/clientes', async (req, res) => {
const clientes = await listarClientes();
res.json(clientes);
});
module.exports = router;
getSodaDatabase() → acessa o banco JSON do Oracle.openCollection('clientes') → abre sua coleção “clientes”.find().getDocuments() → busca todos os documentos.getContent() → pega o conteúdo JSON puro.Sem o uso do SODA, SELECT * FROM clientes não retorna nada, mesmo que os documentos existam no banco.
Se quiser confirmar que o banco realmente contém os documentos, execute no SQL Developer Web (no Oracle Database Actions):
SELECT json_serialize(document) AS doc
FROM clientes;
Ou, se for via SODA REST (no URL do banco Oracle):
https://g9e77c5570f9dab-doguitodb.adb.sa-saopaulo-1.oraclecloudapps.com/ords/admin/soda/latest/colecoes/clientes/
Testa ai e me avise .
Bons estudos.
um outro estudante do grupo descobriu o erro. ao criar o json no Oracle database action ele vem marcado como mongoDB compativel e na aula ja esta desmarcado e o professor nem comenta
nao sei se ao marcar vc cria o json com id, nome , e email e por isso apresenta o erro . no meu caso ja tinha mexido tanto que nao adiantou mas iniciei tudo do zero e acabou que retornou da forma como deveria
Olá amigo.
Fico feliz que tenha encontrado a solução.
E obrigado por compartilhar aqui com a gente.
Pode fechar este tópico agora.
Qualquer duvida comente ai.
Bons estudos.