Harbour + Node.js + Nuvem + MySQL

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Harbour + Node.js + Nuvem + MySQL

Mensagem por Itamar M. Lins Jr. »

Olá!
Esta conversa toda está passando a impressão que o Sr. ainda não entendeu o que é node.js nem horse.
O Harbour tem os comandos para fazer isso. O problema é aprender a usa-los. É o que entendi dessa conversa.
Rest API tem, uHttpd tem ai usando o Harbour para cria-los.
Foi o que entendi lendo a respeito do horse, node.js e demais novidades. Desse processo todo ai se for usar xBase é retrocesso.
O horse é uma LIB do Delphi para criar pequenos servidores via sockets o Harbour tem isso desde muito tempo.
Foi o que entendi desse assunto, me corrijam ai os meus possíveis erros.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Harbour + Node.js + Nuvem + MySQL

Mensagem por Itamar M. Lins Jr. »

Olá!
Outro detalhe é que o tal NODE.JS é para usuários de HTML,PHP, Python, Perl... Que roda atrás de servidores WEB(apache...). É o que entendo desse assunto.
Harbour tem o mod_harbour e mais dois do Eric Landvai.(FastCGI)...
Outras modalidades, HTML, CSS, APACHE... o Node.js fica atrás disso tudo.
Quando vi essas "aulas" telinha com 5 linhas de comandos... Ai já é para pessoa que MANJA de outros (paranauês)... É WEB é Mobile...
Front-end, back-end é apenas a separação de quem programa em Java/Javascript do rapaz das telas do Html+CSS.
De quem faz as telas do rapaz do SGBD(BD mysql backend) por exemplo usando linguagem nativa do SQL de outras... Pq não mudou nada da época do XT para os dias atuais o PC(Personal Computer) entretanto apareceram a WEB e o Mobile(celulares) e ninguém quer ficar desenhando 2,3 telas para cada pessoa que vai acessar a mesma aplicação via celular(mobile) via desktop(.exe) via browser(Edger...) no desktop. Dai o MERCADO, precisou criar mais esses empregos pq aumentou muito o serviço. Precisa saber em qual área vc vai atuar neste cenário.

Quem é das antigas ás vezes não consegue entender ou visualizar de pronto tudo isso. Mas é "apenas" o desktop de sempre dividido em 2,3 ou 4 camadas.
Vai fazer uma aplicação para o mercado, ok. Vai tirar NFe, NFCe ? Mais outro mundo de informações para aprender.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
dbsh
Usuário Nível 3
Usuário Nível 3
Mensagens: 128
Registrado em: 14 Jul 2004 14:19
Localização: ES

Harbour + Node.js + Nuvem + MySQL

Mensagem por dbsh »

Se você for investir em app para web, indico.
Next.JS + Prisma, vai te dar a oportunidade de criar App, para desktop e web simultaneamente.
Next.JS, roda em cima do node, é um framework do React, você pode programar usando Java Script ou TypeScript que é tipificado
Prisma é um ORM, que vai poder usar diversos DB, usando a mesma síntese.

Pode ser publicado na Vercel Gratuitamente. na WEB, mais fácilmente, é só fazer Deploy e já estará funcionando.
Pode ser configurado como servidor local, mais difícil um pouco.
Localmente, colocando dentro de um container Docker e usando Docker-Compose, facilita, porque inicia automaticamente mesmo quando reiniciar o servidor ou travar o container, e ainda pode ser em linux.

Com estes dois exemplos você tem um App de consulta de preço.

Exemplo de acesso a DB, com Prisma.
Este mesmo código server para MySQL, ProstGre, SQLite, SQLServer e Outros.

Código: Selecionar todos

export async function getServerSideProps(context: Context) {
  const { req, res } = context;
  let msg = '';
  let prod: Dados = {
    id: "",
    gtin: "",
    codigo_interno: "",
    descricao: "",
    id_unidade_produto: "",
    preco: "",
    promocao_dtinicio: "",
    promocao_dtfim: "",
    promocao_preco: "",
    message: "",
    Config: {IdFuncionario: "0", EditarPreco: "S", EditarPromocao: "S"},
  }

  try {
    await prisma.produto.findFirst({
      where: { GTIN: req.body.gtin || '' },
      select: {
        ID: true,
        GTIN: true,
        CODIGO_INTERNO: true,
        DESCRICAO: true,
        ID_UNIDADE_PRODUTO: true,
        VALOR_VENDA: true,
      },
    })
      .then((p) => {
        debug.log(`PROMISSE RETORNADA: ${p?.ID} ${p?.GTIN} ${p?.DESCRICAO}`);
        if (p?.ID) {
          debug.log('ID: ' + p.ID);

          prod.id = p.ID.toString();
          prod.gtin = (p?.GTIN ? p?.GTIN : '');
          prod.codigo_interno = (p?.CODIGO_INTERNO ? p.CODIGO_INTERNO : '');
          prod.descricao = (p?.DESCRICAO ? p.DESCRICAO : '');
          prod.id_unidade_produto = p.ID_UNIDADE_PRODUTO.toString();
          prod.preco = (p?.VALOR_VENDA ? p.VALOR_VENDA.toString() : '');

        } else {
          msg = `produto nao foi cadastrado ${req.body.gtin}`;
          debug.log(msg);
        }
      })
      .catch((erro) => {
        msg = `Consulta falhou na query produto.findFirst ${erro.message}`;
        debug.log(msg);
      });
  } catch (e: unknown) {
    msg = `Consulta falhou no acesso ao DB, tabela produto.findFirst ${(e as Error).message}`;
    debug.log(msg);
  };
}
As informações sensíveis, senha de login, usuário e todas informações do DB roda no servidor, não vai para o navegador.
Só os dados daqui para baixo.

Código: Selecionar todos

export default function IndexPage(props: Dados) {
  const [camera, setCamera] = useState(false);
  const [editar, setEditar] = useState(true);
  const [config, setConfig] = useState<bp_Config>();

  const [result, setResult] = useState<string>('');
  const onDetected = (result: string) => {
    setResult(result);
  };

  return (
    <>
      <div className="FlexContainer">
        <img className="logosys" src="/logo/tela_backgroud.jpg" alt="logo sistema" />
        <button
          className="btncamera"
          type="button"
          onClick={(e) => {
            setCamera(!camera);
            debug.log('clicou btnCamera ' + camera);
          }}
        >
          {camera ? "Parar" : "Camera"}
        </button>
        <div className="configuracoes">≡</div>
        <div className="pageTitulo">CONSULTA DE PRECO</div>

        <div className="formConsulta">
          <form action="/" method="post">
            <div>Codigo de Barra:</div>
            <div>
              <input style={{ display: "inline" }} type="text" className="gtin" name="gtin" max-length="20" defaultValue={result ? result : ""} /*ref={gtinInput}*/ autoFocus required />
              {' '}
              <button type="submit">Preco</button>
              {' '}
            </div>
          </form>
        </div>
        <div className="dados">
          <div className="dadosdb" style={{ display: (camera ? 'none' : 'block') }}>
            <div className="sayPreco">
              {props.id ? 'R$: ' + props.preco : ''}
              {(editar && props.id) ? <input type="currency" name="preco1" id="preco1" className="getPreco" onInput={(e) => FormataCurrency(e)} required /> : ''}
            </div>
            <div className="sayPromocao">
              {(editar && props.id) ? 'Promocao: ' : ''}
              {(editar && props.id) ? <input type="date" name="promo1" id="promo1" className="getPromocao" defaultValue={true ? props.promocao_dtinicio : ""} /> : ''}
              {(editar && props.id) ? <input type="date" name="promo2" id="promo2" className="getPromocao" defaultValue={true ? props.promocao_dtfim : ""} /> : ''}
            </div>
            <div>{props.descricao}</div>
            <div>{(process.env.NODE_ENV === 'development' && props.id_unidade_produto) ? 'UNIDADE: ' + props.id_unidade_produto : ''}</div>
            <div>{(process.env.NODE_ENV === 'development' && props.gtin) ? 'GTIN:' + props.gtin : ''}</div>
            <div>{(process.env.NODE_ENV === 'development' && props.codigo_interno) ? 'INTERNO:' + props.codigo_interno : ''}</div>
            <div>{(process.env.NODE_ENV === 'development' && props.id) ? 'ID:' + props.id : ''}</div>
            <div className="message">{props.message}</div>
          </div>
          <div className="container">
            {camera && <Scanner onDetected={onDetected} />}
          </div>
        </div>
      </div>
    </>
  );
}

010011110010000001110011011101010110001101100101011100110111001101101111001000001110100100100000011000110110111101101110011100110111010001110010011101011110110101100100011011110010000001100001001000000110111001101111011010010111010001100101
01001101011000010111001001100011011011110111001100100000010000010110111001110100011011110110111001101001011011110010000001000100011001010010000001000010011011110110111001101001
0101010001100101011011000011101000100000001010000011001000110111001010010011100100101101001110010011100000110100001100110010110100110101001100100011100100110000
mmarcondes
Usuário Nível 2
Usuário Nível 2
Mensagens: 81
Registrado em: 02 Jul 2021 15:06
Localização: witmarsum

Harbour + Node.js + Nuvem + MySQL

Mensagem por mmarcondes »

Pessoal, obrigado pela ajuda de todos, vou continuar meus estudos.
Charly
Usuário Nível 1
Usuário Nível 1
Mensagens: 4
Registrado em: 24 Mai 2023 15:47
Localização: Spain

Harbour + Node.js + Nuvem + MySQL

Mensagem por Charly »

Olà,

Eu recomendo UT que é tudo harbour e permite que você crie aplicações web com pouco conhecimento.

Eu coloquei um exemplo esta semana neste fórum para que você pudesse ver o que você pode fazer com esta ferramenta.

Claro, esta ferramenta é focada na web.

Se você baixar o pacote há uma demonstração de acesso ao mysql

Não sei se neste fórum há debate sobre web...


Saudações

C.
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Harbour + Node.js + Nuvem + MySQL

Mensagem por alxsts »

Olá!
Itamar M. Lins Jr. escreveu:Até onde sei, node.js não é linguagem, é um amontoado de funções em JavaScript.
Quer dizer é JAVA um monte de funções dentro de um outro programa.
JAVA é uma coisa e JavaScript é outra: Qual é a diferença entre o JavaScript e o Java?

Sobre Node.Js:
https://www.alura.com.br/artigos/node-js-definicao-caracteristicas-vantagens-usos?gclid=CjwKCAjw1MajBhAcEiwAagW9MRM7HSYLHt82QeO0qkFe3hVJx05HnCYz7duzHqsMg2a-IOaLcjUaJhoC2sIQAvD_BwE
[]´s
Alexandre Santos (AlxSts)
mmarcondes
Usuário Nível 2
Usuário Nível 2
Mensagens: 81
Registrado em: 02 Jul 2021 15:06
Localização: witmarsum

Harbour + Node.js + Nuvem + MySQL

Mensagem por mmarcondes »

Pessoal, não tem jeito de criar uma API com Harbour ? Passei final de semana lendo e relendo postagens aqui no fórum, e parece que o Harbour tem tudo o que precisa, só não é difundido e poucos fizeram algo nesse sentido, e quando fizeram não deixaram público aqui.
mmarcondes
Usuário Nível 2
Usuário Nível 2
Mensagens: 81
Registrado em: 02 Jul 2021 15:06
Localização: witmarsum

Harbour + Node.js + Nuvem + MySQL

Mensagem por mmarcondes »

Pessoal, vim aqui deixar meu muito obrigado a quem usou seu tempo para me ajudar, mas analisando bem, e depois de ver muito material aqui no Fórum, percebi que muita informação útil está fragmentada, não tem exemplos sobre como usar API. Vou parar com Harbour, já não tenho mais tanto tempo, vou procurar outra linguagem mais moderna para estudar.
ivanil
Usuário Nível 3
Usuário Nível 3
Mensagens: 166
Registrado em: 11 Set 2004 15:13
Localização: Florianópolis/SC

Harbour + Node.js + Nuvem + MySQL

Mensagem por ivanil »

mmarcondes escreveu:Pessoal, vim aqui deixar meu muito obrigado a quem usou seu tempo para me ajudar, mas analisando bem, e depois de ver muito material aqui no Fórum, percebi que muita informação útil está fragmentada, não tem exemplos sobre como usar API. Vou parar com Harbour, já não tenho mais tanto tempo, vou procurar outra linguagem mais moderna para estudar.
Talvez não foste feliz com o resultado da busca por conta da diversidade que envolve o assunto; acredito que quando você diz criar uma api pelo harbour, esteja querendo dizer consumir uma API pelo harbour correto?

Uma api para ser implementada depende da documentação, e vai variar de acordo com a complexidade imposta;

veja um exemplo simples consumindo a API do viacep:

Código: Selecionar todos

Static Function TabCEP_Cep_Action(oQuery )
    Local oPg,cBuf,hBuf,cCep:=Transform(StrZero(val(this.value),8),"@R 99999999")
    Local cSQL:="Select * from tabcep where cep='"+cCep+"'"
    oQuery.Open(cSQL)
    if oQuery.Eof()
        oPg := CreateObject("Microsoft.XMLHTTP")
        oPg:Open("GET","http://viacep.com.br/ws/"+cCep+"/json/",.F.)
        oPg:Send()
        cBuf := oPg:responseBody //ResponseText
        cBuf := hb_UTF8ToStr(cBuf)
        hb_jsonDecode(cBuf,@hBuf)
        if valtype(hbuf)="H".and.!hb_hHaskey( hBuf,'erro')
            oQuery.AddNew()
            If oQuery.ErrorSQL()
                Return FALSE
            Endif
            oQuery.Field.CEP.value           := cCep
            oQuery.Field.Logradouro.Value    := hBuf["logradouro"]
            oQuery.Field.Complemento.Value   := hbuf["complemento"]
            oQuery.Field.Bairro.Value        := hbuf["bairro"]
            oQuery.Field.Localidade.Value    := hbuf["localidade"]
            oQuery.Field.Uf.Value            := hbuf["uf"]
            oQuery.Update()
            If oQuery.ErrorSQL()
                Return FALSE
            Endif
            oQuery.Open(cSQL)
        endif
    endif
    tabcep_ToolbarAction(0,Nil,oQuery)
    tabcep.Cep.Value := cCEP
    Return .T.
Perceba que tudo depende do que foi implementado no servidor; não é algo absoluto.
https://github.com/ivanilmarcelino/desi ... s/BuscaCEP

Agora se sua ideia é criar uma API para ser consumida por terceiros, é muito mais produtivo usar as linguagens próprias para isso que já tem pacotes pré-prontos; é uma tremenda besteira achar que tudo tem que ser feito numa única linguagem.

Boa sorte.
cleitonLC
Usuário Nível 1
Usuário Nível 1
Mensagens: 44
Registrado em: 17 Ago 2021 14:38
Localização: Cariacica/ES

Harbour + Node.js + Nuvem + MySQL

Mensagem por cleitonLC »

mmarcondes escreveu:Pessoal, vim aqui deixar meu muito obrigado a quem usou seu tempo para me ajudar, mas analisando bem, e depois de ver muito material aqui no Fórum, percebi que muita informação útil está fragmentada, não tem exemplos sobre como usar API. Vou parar com Harbour, já não tenho mais tanto tempo, vou procurar outra linguagem mais moderna para estudar.
Boa tarde, me permita discordar um pouco, mas é sim possível criar uma api restful com harbour e também como vimos nos comentários mais acima podemos consumir uma api também, e essa api pode ser feita em node, python, java, php, harbour ou seja, para consumir uma api idepende de quem a criou, você vai ter que criar um client http e consumir essa api que na maioria das vezes é GET, POST, PUT e DELETE ...verbos http nada mais.
A grande questão aqui é a confusão que se faz com o lance do node.js que é apenas um framework (um ambiente de desenvolvimento javascript para desktop) usa a mesma linguagem da web que é javascript,mas com foco no backend, pode-se desenvolver muitas aplicações com node desde apis a aplicações mais complexas usando electron que é uma espécie de app web pra desktop, mas o mesmo pode ser feito com harbour cada um a sua maneira por exemplo, para criar uma api básica com harbour tem a resposta do Itamar https://pctoledo.org/forum/viewto ... 64#p128933 que acho que nem ele lembrava mais disso kkk, mas é uma boa pra iniciar com harbour, exemplos mais complexos você pode ter com o https://github.com/FiveTechSoft/mod_harbour .
cleitonLC
Usuário Nível 1
Usuário Nível 1
Mensagens: 44
Registrado em: 17 Ago 2021 14:38
Localização: Cariacica/ES

Harbour + Node.js + Nuvem + MySQL

Mensagem por cleitonLC »

mmarcondes escreveu:Pessoal, não tem jeito de criar uma API com Harbour ? Passei final de semana lendo e relendo postagens aqui no fórum, e parece que o Harbour tem tudo o que precisa, só não é difundido e poucos fizeram algo nesse sentido, e quando fizeram não deixaram público aqui.
Como eu disse acima com node você consegue desenvolver apis de forma mais simples talvez, do que usando harbour...
Um exemplo que deixo aqui é o seguinte https://github.com/cleitonleonel/Impres ... _iFood.git que é basicamente um server em node, que serve alguns endpoints simples para possiilitar a impressão de pedidos direto do sistema https://gestordepedidos.ifood.com.br/#login , que é o gestor de pedidos do ifood em versão web.
Esse sistema do ifood só permite a impressão via windows, instalando uma extensão que não tem pra linux, daí a necessidade de desenvolver essa solução para usuários linux, optei por usar node.js, mas poderia ter usado python e porque não harbour ????
Logo é algo totalmente possível com base em outras linguagens, bastando apenas adaptar algumas coisas, usar uma lib do harbour para acessar o cups e desenvolver uma solução para linux com harbour visando solucionar esse problema em específico.
Espero ter ajudado com alguma informação relevante.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Harbour + Node.js + Nuvem + MySQL

Mensagem por Itamar M. Lins Jr. »

Olá!
confusão que se faz com o lance do node.js que é apenas um framework
Já falei aqui n vezes... O pessoal nem sabe o que são essas ferramentas.(inclusive eu)
Já expliquei comece com HTML e uHTTP/Apache. Para ter uma noção.
Depois CGI, depois Harbour como CGI... Mas não, vem perguntando disso, daquilo, API, JAVA, JAVASCRIPT... Pq Java é assim, Javascript é assado. Nunca fizeram nada.
Cria uma pagina em HTML... Só isso e depois coloca GET depois POST para entender a diferença vai aos poucos.
Mas já vem querendo saber de coisas ACIMA do básico. Primeiro o básico depois o mais complexo, quanto as definições o que é isso ou aquilo, isso não importa o importante é saber usar.
Quer saber de API, já aprendeu a usar o APACHE ? Sabe configurar o APACHE ? Depois temos o MOD_HARBOUR FASTCGI... tem tanta coisa que eu nem sei se existe necessidade de sair do Harbour. Só mesmo por conta dos exemplos que realmente o iniciante encontra dificuldade. Mas é pq querem sempre colocar a carroça na frente dos bois.

Sem entender HTML PODE ESQUECER TUDO ISSO AI, de NODE, etc...

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

Harbour + Node.js + Nuvem + MySQL

Mensagem por microvolution »

mmarcondes escreveu:Pessoal, vim aqui deixar meu muito obrigado a quem usou seu tempo para me ajudar, mas analisando bem, e depois de ver muito material aqui no Fórum, percebi que muita informação útil está fragmentada, não tem exemplos sobre como usar API. Vou parar com Harbour, já não tenho mais tanto tempo, vou procurar outra linguagem mais moderna para estudar.
Excelente decisão. Passei 5 longos anos de minha vida migrando clipper para harbour e os materiais são poucos. Se não tivesse tão honroso fórum, aí q nada teríamos.
Enfim, nadei, nadei e morri na praia.

Então, resolvi migrar de desktop pra mobile. Analisei no mercado diversas opções, tais como: Flutter, Kotlin, java, javascript, react, react native, etc...
Depois que descobri que a Embarcadero - dona do Delphi, liberou a versão Delphi CE q é 100% grátis. Não tive dúvida.

Estou há mais de 1 ano estudando e material é o q não falta. Já tenho até um app (desktop + mobile[ios/android]) funcionando inclusive com servidores nativos em RESTDATAWARE, NODE.JS e HORSE.
Essa é minha sugestão pra nós que estamos acostumados com programação procedural e mudar para algo mais fácil.
Sucesso!
Grato,
MICROVOLUTION - 16 anos Evoluindo Com Você!


Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Harbour + Node.js + Nuvem + MySQL

Mensagem por fladimir »

Eu, o Janio, Alamino, Automono, talvez até outros, mas esses são os q sei e acompanho, mudamos a cerca de 5 anos para o Windev, é pago, mas vale cada centavo, salvou meu legado, sintaxe muito próxima do xBase, além das facilidades da IDE/Ferramenta, não falo mais nada quem quiser mande mensagem em particular, já fomos muito criticados aqui, talvez pelo fato de ser uma ferramenta paga, mas acho até bom pq sei q tem uma probabilidade de continuidade maior e evolução da mesma.

Atualmente tem sistemas e módulos em desktop integrado com Mobile e webservices tudo criado pela ferramenta, tb tenho uma sistema extranet web q fiz pra uso na minha empresa.
Recomendo 100%

Abraço e sucesso a todos os guerreiros q ainda conseguem sobreviver no harbour/xharbour sem nada mobile/web, eu realmente não sei como conseguem mas parabenizo e torço pra q continuem pq a realidade, pelo menos pra mim, se não evoluisse iria perder drasticamente mercado etc etc.
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Responder