Muito BOM cara, peguei um projeto e resolvi usar REACT com NODE e nunca utilizei as tecnologias, a maioria das minhas duvidas sobre o BACKEND vc já resolveu aqui nesse vídeo, com esse vídeo qualquer pessoa cria um backend muito de boa, já que vc abrangeuboa parte das coisas que precisamos utilizar no desenvolvimento do mesmo. PARABÉNS!!! Conteúdo que deveria ser pago pra ter acesso de tão bom.
Caro Guido. Depois de quebrar muito a cabeça de horas de pesquisa na internet, vi que o problema é com a versão do TypeOrm. Estava usando a mais recente, a 0.3.12, que parece não aceitar mais o caminho para as entidades na configuração da conexão, mas sim, a própria entidade no array entities e migrations. Vi no Github do seu projeto que a versão é 0.3.7. Mudei para essa versão e funcionou sem problemas. Caso alguém tenha o mesmo problema, essa foi a solução que encontrei. Talvez nas próximas versões do TypeOrm esse "bug" seja corrigido. Grande abraço e parabéns mais uma vez pelo belíssimo tutorial.
Guido, meus parabéns, aula digna de um conteúdo pago da Cubos, cujos são de excelentíssima qualidade. Muito obrigado, aliás, pois isso serve de grande ajuda.
Parabéns pela vídeo aula, algumas vídeo aulas mais antigas usavam comandos já defasados do typeORM foi ótimo achar esse vídeo para saber os novos comandos e ainda bem explicado com diferentes relacionamentos entre as entidades.
Obrigado por ensinar essa nova sintáxe do typeorm, eu havia usado ele quando ainda era com createConnect e como foi depreciado esse modelo eu estava bem perdido. Vlw!!
Gostei muito, poderia criar um crud completo utilizando esse mesmo projeto. (post, put, get, delete, path) E tmb utilizando o projeto de Autenticação JWT como um micro serviço, para acessar esse projeto de aulas, como um sistema mesmo, como vc logado o serviço das aulas acessaria pegando o token de autenticação.
Parabéns mestre que aula incrível, super bem explicado, pessoas como você, com um dom incrível de ensinar agregam muito valor na vida de quem está começando como eu. Parabéns pelo conteúdo
Guido, esse tutorial me ajudou bastante nos primeiros passos com typeorm, Muito obrigado pelo conteúdo.!! Eu só queria uma dica nesse caso, com relação a adicionar outra disciplina para a turma, pois desse jeito como está no vídeo ele tá apenas substituindo o valor da disciplina vinculada a turma, e não adicionando.
Pessoal que está tendo problemas em gerar as migrations, altera a versão do TypeORM para 0.3.7, que vai ficar de acordo com o vídeo. Essa ferramenta está sofrendo muitas alterações e está tirando o sono de uma galera. Melhor migrar pro Prisma, que é mais interessante
também acho... Estava testando essa versão, estava tendo problemas há alguns dias e emperrado no tutorial na parte de dar o migration:generate , mas após o update do meu package.json fiz novamente o generate e... deu no mesmo... fica emperrado no "no changes in database..." mesmo fazendo o hacker que o guido me pediu, uma pena... to já abandonando essa ferramenta! Typeorm tá muito instável e difícil de trabalhar por causa da documentação que atualizou e nada mais funciona como antes
Muito bom, estava tendo problema na versão mais recente do typeorm ele não identificava os caminhos das migrations e entities, troquei a versão para 0.3.7 funcionou normalmente.
Para quem talvez esteja com o problema de não conseguir gerar as migrations, aqui o que funcionou para mim: 1- Deixei o typeorm na mesma versão do vídeo (^0.3.7) 2- Deletei o db e criei novamente com o mesmo nome 3- (mais importante) No arquivo data-source.ts eu não utilizei o atalho para pegar as entidades automaticamente da pasta dist/src. Eu importei e referenciei cada entidade no caminho, e só depois disso consegui gerar as migrations, além de apontar diretamente o caminho das migrations também. exemplo do meu arquivo data-source.ts: import { User } from './entities/User'; export const AppDataSource = new DataSource({ ... entities: [User], migrations: ['./migrations/default/*.ts', });
Muito bom, essa aula me foi de grande ajuda, só gostaria de apontar um erro, ao adicionar uma disciplina a aula, ela não adiciona a disciplina ao array como esperado e sim sobrescreve o valor, assim o array de disciplinas da aula fica sempre com apenas um elemento.
Cara eu estive dias passando sufoco com isso, toda hora um problema mesmo lendo toda a documentação, vídeo útil e que nem mesmo no youtube gringo se encontra atualizado assim. Valeu ps: Sugestão de vídeo: como fazer deploy de API no Heroku com banco SQL em typeorm
@@guidocerqueira Cara uma dúvida. Eu diferente de ti, invés de criar a pasta de migrations dentro da pasta src apenas, eu quis direcionar ela para dentro de uma pasta "database" dentro de "src". Porém quando eu dou o comando de migrations estou me deparando com o erro "No changes in database schema were found - cannot generate a migration. To create a new empty migration use "typeorm migration:create" command" Pode me verificar se os caminhos estão corretos? "migration:generate": "typeorm-ts-node-commonjs -d ./src/database/config.ts migration:generate ./src/database/migrations/default", na datasource: entities: [`${__dirname}/**/entities/*.{ts,js}`], migrations: [`${__dirname}/**/database/migrations/*.{ts,js}`], ps: minha datasource config está dentro de config.ts dentro dessa mesma pasta database
professro do jeito que vc fez a inserção em room_subject ele sempre atualiza a tupla que possui a room_id passada pelo seu param... ela n cria diversas tuplas com a mesma room_id e diferentens subject_id... ele só atualiza o subject_id where room_id = req.param
@@guidocerqueira esse foi outro erro, as FK estavm invertidas... mas ainda sim ele atualizava o subject_id da room_subject que continha o room_id que era passado... a solução que encontrei foi com query builder await AppDataSource .createQueryBuilder() .relation(Room, "subjects") .of(room) .add(subject) const roomUpdated = await RoomRepository.find({ where: { id: room.id}, relations: { subjects: true } }) return res.status(200).json(roomUpdated) nesse caso ele adiciona diversas subject_id pra uma mesma room_id e retorna a room com as respectivas subjects
Excelente aula, didática perfeita!!! Poderia me dizer o por que não passamos um if para ver se o usuário digitou o que é preciso no body? igual o nome da sala, titulo do video e etc...
Boa tarde. Ótima vídeo aula. Explicativa e didática excelente. Parabéns. À propósito, que software você usou para fazer o design do banco de dados? Se alguém souber, por favor, responde nano meu comentário. Ficarei grato. Grande abraço.
A Atualização do TypeORM esta em conflito com os demais dependências, resultando no comando npm run migration:generate, a mensagem: "No changes in database schema were found - cannot generate a migration. To create a new empty migration use "typeorm migration:create" command" Faça um uninstall e baixar uma versão anterior, configuração que a app roda sem problemas: "devDependencies": { "@types/express": "^4.17.17", "@types/node": "^18.15.1", "nodemon": "^2.0.21", "ts-node": "^10.9.1", "typescript": "^4.9.5" }, "dependencies": { "dotenv": "^16.0.3", "express": "^4.18.2", "pg": "^8.8.0", "reflect-metadata": "^0.1.13", "typeorm": "^0.3.10" } Espero ajudar!!!!✌🏻
Pessoal que estiver com problemas de não criar as tabelas no banco: Verifica no script criado no json, no generate, a parte que especifica o nome da pasta que será criada em ./src/migrations
Cara, você não tem noção do quanto me salvou aqui. Obrigado mesmo! essa nova atualização me quebrou. Mas deixando uma dúvida, assim como no sequelize, é possível criar seeders para popular o banco com o typeORM? VALEU!
Para quem enfrentar o problema: No changes in database schema were found - cannot generate a migration. To create a new empty migration use "typeorm migration:createerror Command failed with exit code 1. Causa: Não está encontrando o caminho das suas entidades. Existem soluções possíveis: 1 - Remova o caminho em Entities: [`${__dirname}/**/entities/*.{ts,js}`] e declare manualmente suas entiidades ex: [Video, Photo, Post] 2 - Descubra o caminho correto e corrija por exempo: Entities: [`${__dirname}/**/entities/*.{ts,js}`] troque por : entities: [`${__dirname}./../../entities/*.{ts,js}`] espero que ajude alguém.
Estou tendo error: "connect ECONNREFUSED". Acredito que seja por não saber configurar o beekeeper(Estou tendo o contato pela primeira vez com a ferramenta).
To com o mesmo problema... vc conseguiu resolver? Eu não to usando beekeeper, to usado o dbeaver pro banco, mas consigo conectar certinho. To achando que pode ser alguma versão das dependencias ou algo assim...
Opa. Cara, essa mensagem é bem sugestiva. Ela só vai criar a migration se tiver alterações nos models ou caso crie um novo model. Isso, se vc tiver usando a mesma versão do vídeo, não tem erro e nem outro caminho para criação automaticamente das migration. Uma alternativa é vc criar manualmente.
@@guidocerqueira fiz a atualização... mesmo erro. Infelizmente vou ter que abandonar o projeto... a explicação ta otima! Mas o typeorm ta dando dor de cabeça com bugs no controle de versionamento.
@@guidocerqueira top... vou aprender outros ORM pra poder fazer essa troca posteriormente, mas fiz um Notion de todo seu tutorial... incrível como vc é bem didático ao estilo bootcamp! É o que eu preciso pra praticar programação... to de olho no seu canal e te já to te seguindo no Linkedin... to em busca da migração de carreira e ter referências de código javascript é essencial! Grato.
mano, pode me ajudar? já fiz de tudo, fiz, e refiz, mas não sei o que esta de errado, o server fica da start normal, na porta 3000, (tentei em outras portas também) mas quando tento a requisitação mesmo a de teste, do começo, o postman fica enviando, enviando, e nunca retorna.
o meu fica dando esse erro: No changes in database schema were found - cannot generate a migration. To create a new empty migration use "typeorm migration:create" command
Cara eu tô com um B.O que não consigo resolver. Meu TypeORM ta na versão 0.3.12, e misteriosamente ele conecta com o banco de dados, mas não encontra as migrations pra executar nele. Também está com problema no comando "migration:generate" que retorna "no changes in database", mas o comando "migration:create" está ok. O problema é o "migration:run", que conecta no banco, cria a tabela de migrações, mas não executa as migrações. Já mudei tudo que tinha que mudar no DataSource, apontando para a pasta de várias formas diferentes, mas não vai de forma alguma. Alguém já resolver esse B.O?
Guido, como eu faria uma tabela que é "one-to-one", e "one-to-many" ao mesmo tempo? Por exemplo: Tabela de usuário possui one-to-one com tabela de uma conta(id) de "banco", e o id é one-to-many com uma tabela de transações. Muito obrigado pelo seu vídeo, é fantástico!
Faria normalmente. O id do usuário é a chave primária. Na tabela de contas vc teria a chave estrangeira pro id de usuário e na tabela transações a mesma coisa
Video muito bom, mestre!! Mas tenho uma duvida, se eu quiser criar uma migration manualmente, qual comando eu preciso rodar? Nas versões anteriores do typeorm, eu conseguia criar uma migration manualmente e passar o nome da migration pela linha de comando. Nessa versão mais nova, como devo proceder?
Estranho que na hora de gerar as migrações ele me dá um erro dizendo que o data-source é undefined. O caminho está correto, mas por algum motivo parece que depois do .initialize() ele passa a ser undefined
Fala Guido! Tudo certo? Cara gostei demais o seu conteúdo e didática, acredito que você possa ajudar mais pessoas que estão na mesma situação que eu estou. A dúvida é sobre como realizar o salvamento de vários registros que vem do Method Post e que possuem dados da Tabela 1 e Dados para serem armazenados na Tabela2 que possuem Relations OneToMany. Só existe o caminho usando o FOR ou tem outra forma para que o Framework salve os dados sem precisar do FOR? Agradeço demais.
Opa. Obrigado pelo feedback. Então, o método save aceita um array de registros também. Não sei se é isso que precisa, mas faz um teste e me avisa se funcionou
@@guidocerqueira Valeu Guido, já tentei salvar vários registros com um array que tem relations (Lista de Compras e Itens para Compra), mas não tive sucesso. Faço o salvamento com For mesmo, sabendo que este não deve ser o melhor caminho...
Fala Guido, conheci seu canal agora pouco e ja gostei da sua didática. Estou conseguindo aprender bastante de como que trabalha com o typeOrm, mas estou travado em um probleminha, que no caso é na hora de gerar as migrações, ele aponta esse erro aqui "No changes in database schema were found - cannot generate a migration. To create a new empty migration use "typeorm migration:create" command". Simplesmente ele fala que não foi encontrada nenhuma alteração. Ja pesquisei em foruns e nada de achar uma solução, olhei o codigo de cabo a rabo e nada de encontrar alguma inconsistência. Queria saber se isso ja ocorreu com você e se tem alguma maneira de solucionar
Fala man. Essa mensagem não é um erro e sim o que ela mesmo informa. Caso não tenha nenhuma alteração nos seus models, ele não gera as migrations automaticamente.
@@guidocerqueira Fala man. Então, resolvi esse problema, passando direto o caminho das entidades, com o import e infelizmente, mesmo assim tive que fazer um downgrade da versão do typeOrm de 0.3.12 para 0.3.7, porque mesmo solucionando o problema de fazer as migrations, ele apontou outro mensagem quando dava o migration:run dizendo que não havia nenhuma migration no caminho passado, com isso, passei pra versão 0.3.7 e o caminho pegou.
Olá Guido, tudo bem? Fiz todo o seu projeto e funcionou sem problemas. Criei um novo projeto e segui os mesmos passos. Agora quando rodo o comando migration:generate dá o seguinte erro: No changes in database schema were found - cannot generate a migration. To create a new empty migration use "typeorm migration:create" command. Já quebrei a cabeça aqui por alguns dias e não consigo descobrir o motivo, pois esse novo projeto está com as mesmas configurações do que eu fiz seguindo sua vídeo aula, inclusive as mesmas versões das bibliotecas. Quanto tiver um tempinho e puder, poderia me dar alguma dica de como resolver? Pesquisei nos fóruns e todas as dicas que encontrei não funcionaram. Todas eram relativas ao path no data-source para as entities e migrations. Grato.
parabéns pela aula. Uma dúvida: ao inves de criar uma const como vc fez na parte do repositorioes, poderia criar uma classe que extendesse AppDataSource e que recebesse o a entidade no construtor repassando para o super ? Faria sentido isso ?
Pessoal alguém está tomando esse erro? No changes in database schema were found - cannot generate a migration. To create a new empty migration use "typeorm migration:create" command
Cara valeu de mais pelo video, mas eu fiquei com uma duvida, qual seria a melhor forma pra gerar as migration com nome? Porque eu lembro que antes tinha dentro do ormconfig.json a opção de migrationsDir, e ai tu podia chamar só o migration:create -n Nome que ele geraria, eu vi que no video tu ta fazendo com o default, tem alguma ideia de como poder ser feito agora?
Opa... obrigado pelo feedback. Você consegue gerar a migration manualmente normalmente, mas é preciso passar o caminho com o nome do arquivo junto com o comando migration:create. Isso é muito confuso no TypeORM, mas funciona.
Profe, estou criando um API com typeorm e estava segundo seu tutorial e aconteceu um erro aqui.... Se você ou alguém já pegou esse joça e resolveu me de umas dicas. Estou a um dia e meio me debatendo e ainda não consegui saber oque estou fazendo de errado. Este é o bendito =====> EntityMetadataNotFoundError: No metadata for "User" was found. Já alterei essa parte ==> entities: [`${__dirname}/**/entities/*.entity.{ts,js}`], migrations: [`${__dirname}/**/migrations/*.{ts,js}`], umas mil vezes com varias dicas e nenhuma resolveu import 'dotenv/config' import 'reflect-metadata' import { DataSource } from 'typeorm' import express from 'express' const app = express() app.use(express.json()) const port = process.env.DB_PORT as number | undefined const AppDataSource = new DataSource({ type: 'postgres', host: process.env.DB_HOST, port: port, username: process.env.DB_USER, password: process.env.DB_PASS, database: process.env.DB_DBNAME, entities: [`${__dirname}/**/entities/*.entity.{ts,js}`], migrations: [`${__dirname}/**/migrations/*.{ts,js}`], }) AppDataSource.initialize() .then(() => { return app.listen(process.env.PORT, () => { console.log(`Connection initialized with database. 🏆 `, process.env.PORT, '🏆') console.log('') console.log('✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨') }) }) .catch(error => console.log(error)) export default AppDataSource
Conteúdo muito bom :), você sabe se tem como adicionar outra coluna na tabela criada automaticamente com as 2 foreign keys? ou precisa fazer outra entidade para isso?
Obrigado pelo feedback, Leandro… Não entendi muito bem a pergunta, mas se for em relação a criação de novos campos na entidade, basta adicionar o campo que deseja ou alterar qualquer coisa na sua entidade que quando gerar a migration será criada automaticamente
@@guidocerqueira consegui resolver, eu queria adicionar mais colunas na tabela room_subject por exemplo, dai tive que fazer uma entidade, no vídeo você usou JoinTable.
Quando uso comando migration:generate da um erro "No changes in database schema were found - cannot generate a migration. To create a new empty migration use "typeorm migration:create" command"
Essa mensagem significa que não tem nenhuma alteração nas suas entidades para gerar uma nova migração. Experimenta criar um novo atributo em uma de suas entidades e roda novamente que uma nova migração será criada
@@guidocerqueira Simplismente minha cabeça explodiu pq eu acompanhei o projeto com você e na hora que eu rodei o "npm run migration:generate" deu esse erro e eu tinha acabado de criar as entidades, mas deu certo quando fiz as alterações que tinham na continuação do projeto, na hora q dei o comando rodou tudo certo e gerou as migrations. Obrigado por estar a disposição pra responder a gente por aqui. Sucesso irmão.
@@david_nascimento1v9 Cara comigo está dando o mesmo erro, como você fez? Eu entrei no admin do meu banco e não tem nada lá gerado e mesmo assim persiste o erro para toda entidade que crio
tive o mesmo problema, resolvi copiando package.json e usei o comando yarn dependencies, que instalou os pacotes com a versão do video, depois disso não tive nenhum problema
Isso é pq vc gera uma migration e não executa a mesma. Após criar uma migration vc deve executa-la, caso contrário, a migration n será registrada e ele criará outra igual
Pra quem está tendo problema com a criação da migration: export const AppDataSource = new DataSource({ type: "postgres", host: process.env.DB_HOST, port: port, username: process.env.DB_USER, password: process.env.DB_PASS, database: process.env.DB_NAME, entities: [Room, Video], //passe as entidades diretamente migrations: [`${__dirname}/**/migrations/*.{ts,js}`] })
Ótimo vídeo. Tentei fazer a conexão usando mysql, com os mesmos parâmetros, alterando apenas o type e instalando a lib mysql ao invés de pg. Mas não rola nem a pau. Alguma dica para usar mysql?
Guido sua aula tá incrivel, porém estou com um problema na hora de gerar minha migration, aparece o seguinte problema => error Command failed with exit code 1. Error during migration generation: TypeError: dataSourceFileExports is not iterable Poderia me ajudar ?
Fala João. Obrigado pelo feedback. Eu precisava saber como vc configurou sua migration e seu data-source pra poder te ajudar. Apenas o erro é muito pouco pra saber o motivo
@@guidocerqueira Guido, conseguir corrigir o erro na força da curiosidade, fui fazendo uma conferência entre nossos codigos e entendi oque estava errado, agora já funcionou e agarrei em outra etapa, vou continuar fuçando e olhando as possibilidades, queria conferir se tem alguma diferença no teste de rota, estou utilizando o insonmia para fazer o post mas não está indo. Muito obrigado pela sua atenção
Cara, que conteudo top!!! Valeeeeu!!! Uma duvida: no meu docker eu chamo o serviço de database de "db", então eu configuro o host como "db" no .env do projeto... mas quando eu rodo "typeorm:generate" fica dando erro e só funciona se eu trocar para "localhost"... Como voce consegue lidar com esse cenario?
Aqui tá dando certo, valeu pela força!!! Só vou ter que configurar os caminhos para entidades e migrations porque tô usando uma arquitetura de pastas bem diferente
Olá João, obrigado pelo feedback. Para escrever o SQL puro basta usar o método query, da seguinte forma: repository.query('select * from users where id = ?', [1])
Alguem pode me ajudar com este erro, ao usar o yarn migration:generate. " No changes in database schema were found - cannot generate a migration. To create a new empty migration use "typeorm migration:create" command error Command failed with exit code 1. "
Caio, tive o mesmo problema. Depois de quebrar a cabeça por dias, descobri que o problema é um bug na versão mais recente do TypeOrm, a 0.3.12... desinstale ela e instale a versão 0.3.11... para garantir, primeiro você executa yarn remove typeorm para remover a versão que está instalada... depois, yarn add typeorm@0.3.11 para instalar a versão exata 0.3.11 do typeorm. Pra mim isso resolveu... caso não resolva pra você, tenta com versões mais antigas do typeorm, tipo, 0.3.7, que é a versão que o Guido usa no projeto do vídeo. Posta aqui o resultado se deu certo. Abraços.
Observe que o problema é porque ele não encontrou o banco de dados com esse nome. Verifique seu .env ou data-source se está passando o nome corretamente.
@@guidocerqueira não é necessário fazer nenhum tipo de configuração posterior do visual studio? por exemplo... eu já tenho que ter um banco ouvindo esperando conexão ? Eu já verifiquei mil vezes tudo a ponto de reassistir o vídeo, estamos identicos no código!
No meu ponto de vista, quando você se sentir seguro o suficiente com o JavaScript. Isso não significa saber tudo, mas entender o que a linguagem te oferece. O TypeScript pode ser considerado como uma evolução do JavaScript, um JavaScript melhorado, que te ajuda a cometer menos erros.
@@guidocerqueira Entendo! Pergunto isso porque sou estagiário, estou 1 ano e meio na área, minha main stack é react e java(spring boot), mas tenho visto node, com express e javascript, mas faz um tempo não só pelo react, mas uma vontade de ir pro TS, mas sempre fico na dúvida se estou apto, acredito que por ter conhecimento de uma linguagem tipada como java, vai facilitar o aprendizado
@@guidocerqueira Fala meu amigo! dando feedback que já fiz varios projetos com nodeJS e express com JS, depois fiz um curso de typescript (sem express), e agora vou começar a ver a construção de api rest com node e typescript, com seu vídeo! obrigado pelas dicas.
Cara fazendo exatamente como você fez no seu código eu estou tendo um erro de eslint no routes.ts dizendo o seguinte "Promise returned in function argument where a void return was expected.eslint@typescript-eslint/no-misused-promises", o erro vem dá função router.post('/createcustomer', new CreateCustomerController().create)
Como o próprio erro sugere ai, provavelmente alguma restrição do lint. Basta verificar nesse seu controlador o que está ocasionando e caso seja uma forma q vc trabalha, pode adicionar no seu arquivo de configuração do eslint