Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

hc3floyd

requisição express + embedded document

Recommended Posts

eu tenho o seguinte model -

//MEU MODEL
const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const _clienteSchema = {
  nome: {
    type:String,
    require:true
  },
  cpf: {
    type:String
  },
  endereco:{
    rua:{type:String},
    bairro:{type:String}
  },
  contato : {
    celular:{type:String},
    email:{type:String}
  }
  
};

const Cliente = new Schema(_clienteSchema);

module.exports = mongoose.model('Cliente',Cliente);

aqui eu tenho o meu route -

 addCliente = function(req,res) {
    console.log('POST - /cliente');
      var cliente = new Cliente({
        nome : req.body.nome,
        cpf : req.body.cpf,
        endereco : {
          rua : req.body.rua,
          bairro : req.body.bairro
        } ,
        contato : {
          celular : req.body.celular,
          email : req.body.email
        }
    });
    console.log("mondel instanciado!"+cliente);
    console.log("cliente objeto:  "+cliente.endereco["rua"]);
    console.log("req parte rua: "+req.body.rua);
    cliente.save(function(err) {
      
      if(err) {
        console.log('Erro enquanto tentava salvar'+err);
        res.send({error:err});
      } else {
        console.log('cliente criado com sucesso!');
        
        res.send({status:'OK',cliente:cliente});
      }
      
    });
  };

aqui eu tenho meu o html

          <form>
            <fieldset>
              <legend>Cadastrar novo Cliente</legend>
              <div class="form-group">
                <label class="col-md-4" control-label role="nome">Nome :</label>
                <div class="col-md-8">
                  <input class="form-control" type="text" placeholder="digite o nome" name="nome" id="nome"
                  ng-minlength="3" ng-required="true" ng-model="cliente.nome">
                </div>
              </div>
              
              <div class="form-group">
                <label class="col-md-4" control-label role="cpf">cpf :</label>
                <div class="col-md-8">
                  <input class="form-control" type="text" placeholder="digite o cpf" name="cpf" id="cpf"
                  ng-minlength="2" ng-required="true" ng-model="cliente.cpf">
                </div>
              </div>
              
              <div class="form-group">
                <label class="col-md-4" control-label role="rua">Rua :</label>
                <div class="col-md-8">
                  <input class="form-control" type="text" placeholder="digite o rua" name="rua" id="rua"
                  ng-minlength="2" ng-required="true" ng-model="cliente.endereco.rua">
                </div>
              </div>            
  
              <div class="form-group">
                <label class="col-md-4" control-label role="bairro">Bairro :</label>
                <div class="col-md-8">
                  <input class="form-control" type="text" placeholder="digite o bairro" name="bairro" id="bairro"
                  ng-minlength="2" ng-required="true" ng-model="cliente.endereco.bairro">
                </div>
              </div>
  
              <div class="form-group">
                <label class="col-md-4" control-label role="contato">Contato :</label>
                <div class="col-md-8">
                  <input class="form-control" type="text" placeholder="digite o celular" name="celular" id="celular"
                  ng-minlength="2" ng-required="true" ng-model="cliente.contato.celular">
                </div>
              </div>            
  
              <div class="form-group">
                <label class="col-md-4" control-label role="email">Email :</label>
                <div class="col-md-8">
                  <input class="form-control" type="text" placeholder="digite o email" name="email" id="email"
                  ng-minlength="2" ng-required="true" ng-model="cliente.contato.email">
                </div>
              </div>
              <div class="form-group">
                <div class="col-md-4"></div>
                <div class="col-md-8">
                  <button class="btn btn-primary btn-block" ng-click="saveCliente(cliente)">Cadastrar</button>
                  <button class="btn btn-danger btn-block" ng-click="deleteCliente(cliente)">Remover</button>
                </div>
              </div>
            </fieldset>
          </form>

como irei fazer para inserir rua , bairro , celular e email?

quando eu cadastro pelo index.html e preencho todos os inputs só vai pra o banco nome e cpf , Endereco e Contato não =//

olha um console.log do que vai quando eu uso o index.html

mondel instanciado!{ endereco: { bairro: undefined, rua: undefined },
  contato: { email: undefined, celular: undefined },
  _id: 571194d0b52dc0f119ce256f,
  cpf: undefined,
  nome: undefined }
cliente objeto:  undefined
req parte rua: undefined
cliente criado com sucesso!

quando eu uso o postman fica assim , mais eu tenho que uso o formato x-www-form-urlencoded

mondel instanciado!{ endereco: { bairro: 'Fim do mundo', rua: 'Monte urbano' },
  contato: { email: 'contato@marli.com.br', celular: '99108820' },
  _id: 57119502b52dc0f119ce2570,
  cpf: '00921231231',
  nome: 'Marlicleide' }
cliente objeto:  Monte urbano
req parte rua: Monte urbano
cliente criado com sucesso!

se eu usar o form-data fica assim:

mondel instanciado!{ endereco: { bairro: undefined, rua: undefined },
  contato: { email: undefined, celular: undefined },
  _id: 57119849b52dc0f119ce2572,
  cpf: undefined,
  nome: undefined }
cliente objeto:  undefined
req parte rua: undefined
cliente criado com sucesso!

oque eu to fazendo de errado?

Compartilhar este post


Link para o post
Compartilhar em outros sites

resolvido de forma simples com ajuda da comunidade no face

bastava apenas remover todo o copo do shema e passa req.body diretamente na instanciação de

fazendo isso :

 var cliente = new Cliente(req.body);

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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