Ir para conteúdo

POWERED BY:

acneto.frc

Javascript+async-await+MVC

Recommended Posts

Olá a todos! Estou modificando algumas funções que utilizam callback para utilizar asyn-await. Uso o padrão MVC. Meu problema é que chamo a função assíncrona na model ela é executada, não retorna erro mas não volta para o controller. Abaixo parte do código.

 

arquivo routes.js

const segurosRoutes = require('../controllers/segurosControllers.js');

module.exports = (app) => {

app.get('/estagio/movimentacoes/cadastroSeguros', segurosRoutes.segurosGetAll);

}

arquivo controllers.js

const segurosController = require('../models/segurosModels.js');

module.exports = { segurosGetAll, }

function segurosGetAll(req, res){

console.log("Entrando em Controllers Seguros: ")

segurosController.getAll(function (err, result){

if(err) {

console.log("Erro: " + err) throw err;

}else{ console.log("Resultado "+result)
}

})

}

arquivo models.js

const client = require('../../config/conexao.js');

const moment = require('moment');

module.exports = {

getAll,

}

async function getAll() {

m_sql = 'select A.*, B.seg_razaosocial, B.seg_nomefantasia, C.alu_nome, D.usu_username from seguros A left join seguradora B on A.seg_codigo = B.seg_codigo left join usuarios D on A.usu_codigo = D.usu_codigo left join alunos C on A.alu_codigo = C.alu_codigo ';

console.log("SQL em Seguros...."+m_sql)

console.log("-----------------------")

let retorno

try{

const retorno = await client.query(m_sql)

console.log("Retornando da SQL: "+retorno)

} catch(erro) {

console.log(erro)

retorno = erro

}

return retorno

}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que você  deveria estar usando o then do promise ou o await afinal você declarou a funçao como async

 

segurosController.getAll().then((err, result) => {
  if(err) {
    console.log("Erro: " + err) throw err;
  }else{ console.log("Resultado "+result)}
})

// await
let result = await segurosController.getAll();

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

retorna um erro! Acusa erro no ponto(.) antes do then

16v é a linha do código que inicia a declaração da função.

 

/home/acneto/0-SistemasWeb/PjEstagio/CodigoFonte/0_2020_2/10-Out/v_3.7.0.3-6-get_set/api/models/segurosModels.js:16
async function getAll().then((err, result) => {

Compartilhar este post


Link para o post
Compartilhar em outros sites
7 minutos atrás, acneto.frc disse:

retorna um erro! Acusa erro no ponto(.) antes do then

16v é a linha do código que inicia a declaração da função.

 

/home/acneto/0-SistemasWeb/PjEstagio/CodigoFonte/0_2020_2/10-Out/v_3.7.0.3-6-get_set/api/models/segurosModels.js:16
async function getAll().then((err, result) => {

mas seu metodo getAll não retorna uma promise?

const retorno = await client.query(m_sql);

 

oque retorna query?

 

// modifica essa linha

segurosController.getAll().then((result) => {

Compartilhar este post


Link para o post
Compartilhar em outros sites

Retorna a mensagem do console.log dentro da model..Entrando.... depois a instrução executada em outro console.log, passa um traço e mostra [object Object] do outro console.log...É como se o retorno fosse indefinido

 

Entrando em Controllers Seguros:
SQL em Seguros....select A.*, B.seg_razaosocial, B.seg_nomefantasia, C.alu_nome, D.usu_username from seguros A left join seguradora B on A.seg_codigo = B.seg_codigo left join usuarios D on A.usu_codigo = D.usu_codigo left join alunos C on A.alu_codigo = C.alu_codigo
-----------------------
Retornando da SQL: [object Object]

Compartilhar este post


Link para o post
Compartilhar em outros sites
2 horas atrás, acneto.frc disse:

Retorna a mensagem do console.log dentro da model..Entrando.... depois a instrução executada em outro console.log, passa um traço e mostra [object Object] do outro console.log...É como se o retorno fosse indefinido

 

Entrando em Controllers Seguros:
SQL em Seguros....select A.*, B.seg_razaosocial, B.seg_nomefantasia, C.alu_nome, D.usu_username from seguros A left join seguradora B on A.seg_codigo = B.seg_codigo left join usuarios D on A.usu_codigo = D.usu_codigo left join alunos C on A.alu_codigo = C.alu_codigo
-----------------------
Retornando da SQL: [object Object]

// Seu Cenario
async function query(sql) {
  return {data:"sucess"};
}

async function getAll() {
  m_sql = 'select A.*, B.seg_razaosocial, B.seg_nomefantasia, C.alu_nome, D.usu_username from seguros A left join seguradora B on A.seg_codigo = B.seg_codigo left join usuarios D on A.usu_codigo = D.usu_codigo left join alunos C on A.alu_codigo = C.alu_codigo ';
  console.log("SQL em Seguros...."+m_sql)
  console.log("-----------------------")

  let retorno
  try{
    retorno = await query(m_sql);
    console.log("Retornando da SQL: "+retorno.data)
  } catch(erro) {
    console.log(erro)
    retorno = erro;   
  } 
  return retorno;
}

getAll().then((result) => {
  console.log('Result: ', result);
})

Seu erro está sendo o seguinte você está declarando uma variavel const retorno dentro do try e retornando let retorno

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Wanderval obrigado por esta nos ajudando! Somos iniciantes no uso dessas funções por isso nossa insegurança.

Ficou um pouco confuso/perdido onde deveremos fazer as modificações. Quais serão no controllers e quais na Model. Também me perdi onde será inserido async e onde será o await. Como assyn-await são para usar em funções assíncronas só fizemos referência a estas funções na Model que é onde efetivamente será feito o acesso assíncrono (mysql/servidor) no controller nada foi declarado.

Obrigado!

Neto

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
2 horas atrás, acneto.frc disse:

Olá Wanderval obrigado por esta nos ajudando! Somos iniciantes no uso dessas funções por isso nossa insegurança.

Ficou um pouco confuso/perdido onde deveremos fazer as modificações. Quais serão no controllers e quais na Model. Também me perdi onde será inserido async e onde será o await. Como assyn-await são para usar em funções assíncronas só fizemos referência a estas funções na Model que é onde efetivamente será feito o acesso assíncrono (mysql/servidor) no controller nada foi declarado.

Obrigado!

Neto

 

 

 

O que eu fiz foi criar um cenário, eu fiz uma pergunta pra você no post anterior sobre o que a query retorna, certo? Na maioria de libs Javascrip o client.post client.get retornam uma Promise, quando eu falo isso, eu digo o tipo do retorno não o conteudo em si.

 

Então se você ver eu criei o metodo query retornando como async torna o metodo uma promise. procure ler a respeito assim vai entender e ficar mais seguro. mas basicamente você so precisaria alterar a sua variavel que está errada ja que a chamada do metodo já está com o "then()".

 

Faça tentativas use o then  na chamda do getAll e corrija o que apontei relacionado a variavel retorno.

entao caso haja problema coloque a sua tentativa aqui

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz a correção da variável retorno (tirei o let de inicialização) e tirei o return também mas não sei se está tirar esta certo. Também me compliquei quando você diz "Seu Cenário" porque venho com a função informada no router para controller no controller dentro da função chamo a função assíncrona que está na model.

--> router -> segurosGetAll

--> controllers -> segurosController.getAll

--> model --> async-await -> getAll

 

Quanto a ler a respeito tenho feito isso a algum tempo executei diversos exercícios de postagens e vídeo aulas e agora estou tentando implementar na aplicação em produção.

Pelas leituras entendi que quando usar async-await não usaria mais Promisses apesar do retorno dessas funções retornarem promisses. Caso tenha um tutorial ou qualquer material (exemplos) sobre o assunto e possa compartilhar tenho muito interesse. Não gostaria de sair da padrão MVC. Por enquanto muito obrigado.

 

Editado por acneto.frc
Completar justificativa

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa noite a todos! Em especial ao Wanderval!

Modifiquei o código mas ainda sem sucesso.

Agora recebo de retorno a resposta:

undefined

 

abaixo o controllers:

const segurosController = require('../models/segurosModels.js');

module.exports = {
    segurosGetAll,
}

async function segurosGetAll(req, res) {
    console.log('Acessando Models!!!')
    try{
        const retorno = await segurosController.getAll()
        console.log(JSON.stringify(retorno))
    }catch (err){
        console.log(err)
    }
}

 

abaixo a model.

conexão é a instância mysql

 

const conexao = require('../../config/conexao.js');
module.exports = {
  getAll,
}  

function getAll() {
  m_sql = 'select * from seguros ';

  console.log("SQL em Model Seguros...."+'\n'+m_sql)

  conexao.query(m_sql); 

  console.log("GetAll Sql retornando: ")

}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
4 horas atrás, acneto.frc disse:

Boa noite a todos! Em especial ao Wanderval!

Modifiquei o código mas ainda sem sucesso.

Agora recebo de retorno a resposta:

undefined

 

abaixo o controllers:


const segurosController = require('../models/segurosModels.js');

module.exports = {
    segurosGetAll,
}

async function segurosGetAll(req, res) {
    console.log('Acessando Models!!!')
    try{
        const retorno = await segurosController.getAll()
        console.log(JSON.stringify(retorno))
    }catch (err){
        console.log(err)
    }
}

 

abaixo a model.

conexão é a instância mysql

 


const conexao = require('../../config/conexao.js');
module.exports = {
  getAll,
}  

function getAll() {
  m_sql = 'select * from seguros ';

  console.log("SQL em Model Seguros...."+'\n'+m_sql)

  conexao.query(m_sql); 

  console.log("GetAll Sql retornando: ")

}

 

 

 

Pelo que percebi essa aplicação é node.js e não uma aplicação front-end

está aparecendo undefined pq você não esta retornando nada no response, isso é uma API náo pode deixar de usar response e request.

 

Essa é uma chamada de APi para rota como foi delegado para outro método manipular response(res) ou request(req) como é um get deve ter um response populado.

Segundo seu Model não está fazendo nada além de fazer console.log então mesmo chegando resposta do banco nada voltara para o controller.

app.get('/estagio/movimentacoes/cadastroSeguros', segurosRoutes.segurosGetAll);

 

Como você pode ver em nenhum momento foi utilizado o "res"nesse método

=====CONTROLLER

const segurosController = require('../models/segurosModels.js');

module.exports = {
    segurosGetAll,
}

async function segurosGetAll(req, res) {
    console.log('Acessando Models!!!')
    try{
        const retorno = await segurosController.getAll()
        console.log(JSON.stringify(retorno))
    }catch (err){
        console.log(err)
    }
}

=====ALTERACAO CONTROLLER

const segurosController = require("../models/segurosModels.js");

module.exports = {
  segurosGetAll
};

async function segurosGetAll(req, res) {
  console.log("=========SEGUROS GET ALL CONTROLLER========");
  try {
    const retorno = await segurosController.getAll();
    console.log(JSON.stringify(retorno));

    res.json(retorno);
  } catch (err) {
    console.log(err);
    res.json({ error: true });
  }
}

======MODEL======

const conexao = require('../../config/conexao.js');
module.exports = {
  getAll,
}  

function getAll() {
  m_sql = 'select * from seguros ';

  console.log("SQL em Model Seguros...."+'\n'+m_sql)

  conexao.query(m_sql); 

  console.log("GetAll Sql retornando: ")

}

=====ALTERACAO MODEL=======

// const client = require("../../config/conexao.js");
// const moment = require("moment"); // comentei pq nao vi nenhuma utilizacao

// APENAS TEST MOCK
const client = require("../config/conexao.js");

module.exports = {
  getAll
};

async function getAll() {
  console.log("=========GET ALL MODEL========");
  const m_sql =
    "select A.*, B.seg_razaosocial, B.seg_nomefantasia, C.alu_nome, D.usu_username from seguros A left join seguradora B on A.seg_codigo = B.seg_codigo left join usuarios D on A.usu_codigo = D.usu_codigo left join alunos C on A.alu_codigo = C.alu_codigo ";

  let retorno;
  try {
    retorno = await client.query(m_sql);
  } catch (error) {
    throw new Error(error);
  }

  return retorno;
}

 

tenta acessar essa plataforma: https://codesandbox.io/s/zealous-brahmagupta-mqhxd?file=/src/index.js

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz as correções recomendadas e agora apresenta a seguinte mensagem

 

TypeError: Converting circular structure to JSON
    at JSON.stringify (<anonymous>)
    at segurosGetAll (/home/acneto/0-SistemasWeb/async_await/v03/api/controllers/segurosControllers.js:11:26)
    at process._tickCallback (internal/process/next_tick.js:68:7)

 

11:26 é o início da palavra

stringify

 

E no navegador apresenta:  error: true.

 

Parece que o que está retornando da model não pode ser "convertido"

 

Caso faça console.log(retorno), apresenta um monte de informações.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
1 hora atrás, acneto.frc disse:

Fiz as correções recomendadas e agora apresenta a seguinte mensagem

 

TypeError: Converting circular structure to JSON
    at JSON.stringify (<anonymous>)
    at segurosGetAll (/home/acneto/0-SistemasWeb/async_await/v03/api/controllers/segurosControllers.js:11:26)
    at process._tickCallback (internal/process/next_tick.js:68:7)

 

11:26 é o início da palavra

stringify

 

E no navegador apresenta:  error: true.

 

Parece que o que está retornando da model não pode ser "convertido"

 

Caso faça console.log(retorno), apresenta um monte de informações.

 

 

 

Aparece erro true pq está quebrando no try do controller, apenas remova essa linha do stringify e substitua {error:true} pelo erro  {error: err} ela não esta sendo usada é apenas um código que você havia colocado e eu manti, e confira o que é retornado do banco o formato de dado retornado.

 

Obs: você deve colcoar código aqui, e muito dificil apenas avaliar sua argumentação, e note que coloquei anotações e como não colocou eles aqui não sei se realizou as alterações, ex: no model deixei claro que a require que estava usando era de test, e deveria ser usado o arquivo de conexão orginal quando testado ecom amebiente real. mas se você somente oclocar os erros, ninguem aqui no forum vai conseguir analisar sua condição atual.

Compartilhar este post


Link para o post
Compartilhar em outros sites
20 horas atrás, wanderval disse:

 

 

Aparece erro true pq está quebrando no try do controller, apenas remova essa linha do stringify e substitua {error:true} pelo erro  {error: err} ela não esta sendo usada é apenas um código que você havia colocado e eu manti, e confira o que é retornado do banco o formato de dado retornado.

 

Obs: você deve colcoar código aqui, e muito dificil apenas avaliar sua argumentação, e note que coloquei anotações e como não colocou eles aqui não sei se realizou as alterações, ex: no model deixei claro que a require que estava usando era de test, e deveria ser usado o arquivo de conexão orginal quando testado ecom amebiente real. mas se você somente oclocar os erros, ninguem aqui no forum vai conseguir analisar sua condição atual.

O código do routes ficou assim:

 

const segurosRoutes = require('../controllers/segurosControllers.js');

module.exports = (app) => {
	app.get("/estagio/movimentacoes/cadastroSeguros", segurosRoutes.segurosGetAll);
};

Código do controllers:

const segurosController = require('../models/segurosModels.js');

module.exports = {
    segurosGetAll,
};

async function segurosGetAll(req, res) {
    console.log('============== Seguros GetAll Controller!!! ====================')
    try{
        const retorno = await segurosController.getAll();
        //console.log(JSON.stringify(retorno));
        res.json(retorno);
    } catch (err){
        console.log(err);
        res.json({error: err})
    }
}

E a model:

const conexao = require('../../config/conexao.js');

module.exports = {
  getAll
};

async function getAll() {
  console.log('========== Seguros Get All Model =============')
  const m_sql = 'select * from seguros ';

  let retorno;

  try{
    retorno = await conexao.query(m_sql); 
    console.log("GetAll Sql retornando: ")
    console.log("\n"+retorno)
  }catch(error) {
    throw new Error(error);
  }

  return retorno;
}

E agora está retornando:

- no terminal

GetAll Sql retornando:

[object Object]
TypeError: Converting circular structure to JSON

 

- no browse:

error : {}

 

Me parece que  [object Object] retornado no controller seja um conteúdo que não consegue apresentar.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito bem lá vai o código:

routes:

 

const segurosRoutes = require('../controllers/segurosControllers.js');

module.exports = (app) => {
	app.get("/estagio/movimentacoes/cadastroSeguros", segurosRoutes.segurosGetAll);
};

controllers

const segurosController = require('../models/segurosModels.js');

module.exports = {
    segurosGetAll,
};

async function segurosGetAll(req, res) {
    console.log('============== Seguros GetAll Controller!!! ====================')
    try{
        const retorno = await segurosController.getAll();
        console.log('============== Retornando .... Seguros GetAll Controller!!! ====================')

        //console.log(JSON.stringify(retorno));
        res.send(retorno);

    } catch (err){
        console.log(err);
        res.json({error: err})
    }
}

model

const conexao = require('../../config/conexao.js');
module.exports = {
  getAll
};

async function getAll() {
  console.log('========== Seguros Get All Model =============')
  const m_sql = 'select * from seguros ';

  console.log("SQL em Model Seguros...."+'\n'+m_sql);
  console.log("\n")

  let retorno;

  try{
    retorno = await conexao.query(m_sql); 
    console.log("GetAll Sql retornando: ")
    console.log("\n"+retorno)
  }catch(error) {
    throw new Error(error);
  }

  return retorno;
}

E agora está retornando:

- no terminal

GetAll Sql retornando:

[object Object]
TypeError: Converting circular structure to JSON

 

- no browse:

error : {}

 

Me parece que  [object Object] retornado no controller seja um conteúdo que não consegue apresentar.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
20 horas atrás, wanderval disse:

O que o teu banco retorna? que tipo de dado, nao precisa postar aqui já que é um dado sencivel mas tente colcoar uma estrutura do objeto que é retornaod pelo banco

Dentro da Modelo tem um colsole.log para apresentar o retorno do await

try{
    retorno = await conexao.query(m_sql); 
    console.log("GetAll Sql retornando: ")
    console.log("\n"+retorno)
  }catch(error) {
    throw new Error(error);
}

  return retorno;

e mostra no console :

[object Object]
TypeError: Converting circular structure to JSON

 

Esse retorno eu não consigo manipular...

 

E no navegador retorna:

error: {}

resultado da instrução abaixo do controller

res.send(retorno)


 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por Jafreal
      Bom dia a todos
       
      Criei um programa em MVC, que utiliza duas tabelas customizadas. Tipo Pai e Filho. Similar as tabelas SC5 e SC6. Estou usando FWMBrowse, por isso utilizei a relação abaixo no Static Function ModelDef.
       
      Local oModel         := Nil
      Local oStPai         := FWFormStruct(1, 'SZD')
      Local oStFilho         := FWFormStruct(1, 'SZE')
      Local aSZERel        := {}
       
      oModel := MPFormModel():New('zMVCMd3M')
      oModel:AddFields('SZDMASTER',,oStPai)
      oModel:AddGrid('SZEDETAIL','SZDMASTER',oStFilho,,,,,)  
       
      aAdd(aSZERel, {'ZE_FILIAL' ,'ZD_FILIAL' } )
      aAdd(aSZERel, {'ZE_EDITAL' ,'ZD_EDITAL' } ) 
       
      oModel:SetRelation('SZEDETAIL', aSZERel, SZE->(IndexKey(1))) 
      oModel:GetModel('SZEDETAIL'):SetUniqueLine({"ZE_FILIAL","ZE_EDITAL","ZE_CODPROD"})     
      oModel:SetPrimaryKey({})
       
      Return oModel
       
      O problema é que na hora da gravação na tabela filho ele não grava o campo filial(ZE_FILIAL), mas grava o campo edital(ZE_EDITAL). Alguem já passou por isso?
       
    • Por Sapinn
      Pessoal estou com um dúvida terrivel não consigo checar os paramentros passados pela url ele sempre pagar anterior o que fazer? 
      Vejam o codigo:: 
        <?php     class Rota     {         private $controlador = 'Paginas';         private $metodo = 'index';         private $parametros = [];         public function __construct()         {             $url = $this->url() ? $this->url() : [0];             if (file_exists('../app/Controllers/' . ucwords($url[0] . 'php'))) {                 $this->controlador = ucwords($url[0]);                 unset($url[0]);             }             require_once '../app/Controllers/' . $this->controlador . '.php';             $this->controlador = new $this->controlador;             if (isset($url[1])) {                 if (method_exists($this->controlador, $url[1])) {                     $this->metodo = $url[1];                     unset($url[1]);                 }             }             $this->parametros = $url ? array_values($url) : [];             call_user_func_array([$this->controlador, $this->metodo], $this->parametros);             var_dump($this);         }         private function url()         {             $url = filter_input(INPUT_GET, 'url', FILTER_SANITIZE_URL);             if (isset($url)) {                 $url = trim(rtrim($url, '/'));                 $url = explode('/', $url);                 return $url;             }         }     } Minha class Paginas:
      <?php class Paginas{              public function sobre($id){             echo $id."<hr>";         }     } O debug está me retornando:
       
      paginas
      _________________________________________________________________________________________________________________________________________________________________________________________
      object(Rota)#1 (3) { ["controlador":"Rota":private]=> object(Paginas)#2 (0) { } ["metodo":"Rota":private]=> string(5) "sobre" ["parametros":"Rota":private]=> array(1) { [0]=> string(7) "paginas" } }

      url usada: http://localhost/minha_pagina/paginas/sobre

      Ele não deveria gerar um erro e pedir para que eu passasse mais um paramentro na url? Ao invés disso ele só me retorna o método paginas o que fazer?
    • Por acneto.frc
      Tenho uma aplicação WEB NodeJs+Javascript. Na minha view (FILTROS PARA RELATÓRIO) além dos inputs tenho um radio button onde seleciono o tipo de do relatório que será gerado. No meu Controller tenho acesso aos campos inputs (type=text) normalmente mas não tenho acesso aos inputs (type=radio). Abaixo vou colocar parte do código.
       
      <!DOCTYPE html> <html lang="pt-br"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <!-- As 3 meta tags acima *devem* vir em primeiro lugar dentro do `head`; qualquer outro conteúdo deve vir *após* essas tags --> <title><%= title %></title> <link rel="stylesheet" type="text/css" media="screen" href="/estilos/estilos.css" /> </head> <body> <header> <nav class="menuBase"> <ul> <li><a href="/">Início</a></li> <li><a href="/estagio/relatorios">Voltar</a></li> <li><a href=""> </a></li> </ul> </nav> </header> <main class=frmRelFiltros> <ul class="nav nav-tabs"> <li class="active" id="home-tab"><a data-toggle="tab" href="#pagina1">Relatório de Contratos</a></li> </ul> <div class="tab-content"> <div id="pagina1" class="tab-pane fade in active"> <form action='/contratos/relatorios/RelContratosPrint' method="post" id="relAlunos"> <!-- primeira linha --> <br> <div class="filtros" style="margin:15px"> <div class="row"> <div class="form-group col-md-6 col-md-offset-0"> <label>Código Contrato.:</label> <input type="text" name="cod_ini" value="0"/> A <input type="text" name="cod_fim" value="999999" /> <br> <br> <label>Ativo/Inativo...:</label> <input type="text" name="atv_ini" value="A"/> A <input type="text" name="atv_fim" value="Z" /> <br> <br> <label>Data Cadastro...:</label> <input type="text" name="cad_ini" value="01/01/2000"/> A <input type="text" name="cad_fim" value="31/12/2090" /> <br> <br> <label>Data Vigência...:</label> <input type="text" name="vig_ini" value="01/01/2000"/> A <input type="text" name="vig_fim" value="31/12/2090" /> <br> <br> <label>Sit. Contrato...:</label> <input type="text" name="sit_ini" value="0"/> A <input type="text" name="sit_fim" value="99" /> <br> <br> <label>Código do Curso.:</label> <input type="text" name="cur_ini" value="1"/> A <input type="text" name="cur_fim" value="99" /> <br> <br> </div> <div class="form-group col-md-6 col-md-offset-0"> <label>Código da Empresa.:</label> <input type="text" name="emp_ini" value="1"/> A <input type="text" name="emp_fim" value="9999" /> <br> <br> <label>Centro Integração.:</label> <input type="text" name="cie_ini" value="1"/> A <input type="text" name="cie_fim" value="999"/> <br> <br> <label>Valor da Bolsa....:</label> <input type="text" name="vlr_ini" value="1"/> A <input type="text" name="vlr_fim" value="99999999"/> <br> <br> <br> <div id="opcoesRelContratos" > <p>Selecione o Tipo do Relatório:</p> <input type="radio" id="tipoRel" name="padrao" value="padrao" checked=true> <label for="padrao">Padrao-Conferência</label><br> <input type="radio" id="tipoRel" name="faixa" value="faixa"> <label for="faixa">Faixa Salarial-Estatístico</label><br> <input type="radio" id="tipoRel" name="alunos_empresas" value="alunos_empresas"> <label for="alunos_empresas">Identificação de Alunos por Empresa</label> <br> <input type="radio" id="tipoRel" name="entregas" value="entregas"> <label for="entregas">Pastas de Estágios Entregues</label><br> <input type="radio" id="tipoRel" name="contratos_vencer" value="contratos_vencer"> <label for="contratos_vencer">Contratos a Vencer 30 dias</label> <br> </div> </div> </div> </div> <br> <!-- botões de acão --> <div class="btn-acao" style="margin-bottom: 0px;"> <div class="row"> <div class="col-md-2 col-md-offset-1"> <button id="btn-executarRel" type="submit" class="btn btn-primary btn-block" >Executar </button> </div> <div class="col-md-2 col-md-offset-1"> <button type="button" id="btn-cancelarRel" class="btn btn-primary btn-block">Voltar</button> </div> </div> </div> <br> </form> </div> <!-- tab pagina 1 --> </div> </main> <!-- JavaScript (Opcional) --> <!-- jQuery primeiro, depois Popper.js, depois Bootstrap JS --> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> <script src="https://cdn.datatables.net/1.10.19/js/jquery.dataTables.min.js"></script> <script type="text/javascript" src="/js/funcoesCliente.js"></script> <script type="text/javascript" src="/js/script.js"></script> </body> </html>  
       
      Agora o código do routes e controllers. No controllers preciso acessar um elemento radio da view
      *** botão para submeter a view <button id="btn-executarRel" type="submit" class="btn btn-primary btn-block" >Executar </button> *** rota a ser executada ao sonfirmar a execução do relatório <form action='/contratos/relatorios/RelContratosPrint' method="post" id="relAlunos"> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ arquivo: contratosRoutes.js var contratosControllers = require('../controllers/contratosControllers.js'); module.exports = (app) => { app.get('/contratos/relatorios/relContratos', contratosControllers.contratosRel); app.post('/contratos/relatorios/RelContratosPrint', contratosControllers.printContratosRel); } +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ arquivo: contratosControllers.js const alunosController = require('../models/contratosModels.js'); const cnf_ambiente = require('../../config/config.js'); const moment = require('moment'); module.exports = { printContratosRel, } function printContratosRel(req, res){ console.log("Data Inicial Normal: "+req.body.cad_ini) console.log("Data Final Normal..: "+req.body.cad_fim) console.log("++++++++++++++++++++ DATA NO FORMATO DE ENTRADA APÓS O POST ++########################") // ++++++++++++ BAIXO O ERRO document is not defined var radios = document.getElementsById("tipoRel"); for (var i = 0; i < radios.length; i++) { if (radios[i].checked) { console.log("Escolhido: " + radios[i].value); } } cod_i = req.body.cod_ini; cod_f = req.body.cod_fim; atv_i = req.body.atv_ini; atv_f = req.body.atv_fim; cad_i = req.body.cad_ini; cad_f = req.body.cad_fim; vig_i = req.body.vig_ini; vig_f = req.body.vig_fim; sit_i = req.body.sit_ini; sit_f = req.body.sit_fim; cur_i = req.body.cur_ini; cur_f = req.body.cur_fim; emp_i = req.body.emp_ini; emp_f = req.body.emp_fim; cie_i = req.body.cie_ini; cie_f = req.body.cie_fim; vlr_i = req.body.vlr_ini; vlr_f = req.body.vlr_fim; console.log("Relatório >>>>>>>>>>>>>>>>>>>>>>>> "+cad_i + ' - '+ cad_f); alunosController.buscarPrintContratosRel( cod_i, cod_f, vlr_i, vlr_f, sit_i, sit_f, cur_i, cur_f, emp_i, emp_f, cad_i, cad_f, vig_i, vig_f, atv_i, atv_f, cie_i, cie_f, function(err, result){ if(result){ console.log("Encontrei registro de contratos.... Vou tratar das datas.."); for(var i = 0; i < result.length; i++ ){ result[i].cea_dtcadastro = moment(result[i].cea_dtcadastro).format("DD/MM/YYYY"); result[i].cea_dtalteracao = moment(result[i].cea_dtalteracao).format("DD/MM/YYYY"); result[i].cea_vigenciainicial = moment(result[i].cea_vigenciainicial).format("DD/MM/YYYY"); result[i].cea_vigenciafinal = moment(result[i].cea_vigenciafinal).format("DD/MM/YYYY"); } } if (err) { throw err; } else{ res.render('estagios/relatorios/frm_relContratosPrint.ejs', {title: 'Contratos', nomeUsuario: global.nomeUsuario, codigoUsuario: global.codigoUsuario, nomeFormulario: req.originalUrl, obj_contratos: result, }); } }); }  
    • Por Caio Henrique Bottigelli
      Olá, estou desenvolvendo um sistema em asp.net Framework MVC, usando o banco de dados Postgresql. Quando 2 usuários diferentes usam o sistema acontece conflito de informações, por exemplo, no cadastro de clientes, preciso vincular uma pessoa a um determinado cliente, caso 2 usuários estiverem usando, e os 2 fizerem essa ação de vincular pessoas a um cliente, no 2º usuário vai aparecer a pessoa que o 1º usuário vinculou. É como se o sistema estivesse usando uma única Lista e os 2 usuários estivessem compartilhando essa lista.
      As variáveis de conexão não estão estáticas, toda vez que alguém entrar no sistema, vai ser criado uma nova instancia de conexão.
      Alguém sabe como resolver esse conflito de informação entre usuários?
    • Por sergiosfpereira
      Boa tarde a todos,
       
      Estou estudando MVC e me deparei com a seguinte situação:

      Tenho uma View que precisa receber dados de dois Models diferentes, então no controller desta View eu tenho a função abaixo:
      public function teste($id) { $this->view->a = $this->getOneA($id); $this->loadModel('b'); $this->view->b = $this->model->getOneB($id); $this->view->render('app/teste'); } O cenário acima me retorna o esperado, pega os dados de A e de B e os deixa disponiveis para a View.
       
      Está correto utilizar esse método ?
       
      Se sim, eu deveria carregar o Model "b" no __construct do controller "a"  ou diretamente na função do controller "a" como neste exemplo?
       
      Se não, qual a melhor maneira de obter dados de diferentes Models?
       
      OBS: todos os controllers são filhos do controller principal e todos os models são filhos do model principal.
       
      E me perdoem se eu estiver falando bobagem, como disse, estou aprendendo e a finalidade aqui é didatica e agradeço a quem puder contribuir.
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.