Solucionado (ver solução)
Solucionado
(ver solução)
8
respostas

TypeError: app.servicos.correiosSOAPClient is not a constructor

Estou com o MESMO problema do rapaz desse tópico: https://cursos.alura.com.br/forum/topico-typeerror-app-services-correiossoap-is-not-a-constructor-50605

Quando vou rodar o projeto aparece esse erro do título. Não sei se a versão do soap é diferente, mas tive um erro parecido no mesmo projeto em que eu tive que mudar a biblioteca, quer dizer, estava diferente do que vcs colocaram no curso (vcs mostraram 'restify', mas na verdade era 'restify-clients'). Só aí funcionou.


meu código:


var soap = require("soap");

function CorreiosSOAPClient() {
    this._url = "http://ws.correios.com.br/calculador/CalcPrecoPrazo.asmxwsdl";
}

module.exports = function () {
    return CorreiosSOAPClient;
}

CorreiosSOAPClient.prototype.calculaPrazo = function (args, callback) {
    console.log("entrou")
    soap.createClient(this._url, function (erro, cliente) {

        console.log("Cliente soap criado");

        //args: vem do método dentro do correios.js
        cliente.CalcPrazo(args, callback);

    });
}

module.exports = function (app) {

    app.post('/correios/calculo-prazo', function (req, res) {

        var dadosDaEntrega = req.body;
        var correiosSOAPClient = new app.servicos.correiosSOAPClient().correiosSOAPClient
            .calculaPrazo(dadosDaEntrega, function (erro, resultado) {

                if (erro) {
                    res.status(500).send(erro);
                    return;
                } else {
                    console.log("prazo calculado");
                    res.json(resultado);
                }

            });

    });

};
8 respostas

Olá, Rafaela.

Como está a parte do seu código que você usou o express-loader ou consign?

Desculpa, eu não estou me entendendo com a formatação.

Seria o arquivo config/custom-express.js?

//arquivo específico pra escrever códigos do express
var express = require('express');
var consign = require('consign');
var bodyParser = require('body-parser');
var expressValidator = require('express-validator');

//retorna uma instancia do express
module.exports = function(){
    var app = express();

    app.use(bodyParser.urlencoded({extended: true})); //
    app.use(bodyParser.json()); //faz parser de json, faz parser de um corpo de requisição
    app.use(expressValidator()); //lib para validaçoes

    consign() //gerencia diretórios da aplicação
    .include('controllers') //a pasta controller deve ser carregada dentro da variável 'app' assim que subir 
    .then('persistencia') //inclui também a pasta 'persistencia' dentro do app pelo express
    .then('servicos')
    .into(app);

    return app;
}

outra coisa, vcs poderiam disponibilizar os arquivos do curso atualizados em cada aula. Isso facilitaria horrores.

Era esse arquivo mesmo Rafaela.

Faz uma pequena alteração no código do correiosSOAPClient , deixe ele assim:

var soap = require("soap");

function CorreiosSOAPClient() {
    this._url = "http://ws.correios.com.br/calculador/CalcPrecoPrazo.asmxwsdl";
}

CorreiosSOAPClient.prototype.calculaPrazo = function (args, callback) {
    console.log("entrou")
    soap.createClient(this._url, function (erro, cliente) {

        console.log("Cliente soap criado");

        //args: vem do método dentro do correios.js
        cliente.CalcPrazo(args, callback);

    });
}

module.exports = function () {
    return CorreiosSOAPClient;
}

Vê se para o erro :-)

Sobre os arquivos do cursos no final de cada aula você tem o código disponível para fazer download:

Então, mesmo com a mudança, não deu certo :(

Acabei pegando a versão de vocês no link e repliquei. Reinstalei os pacotes do npm a partir do package.json de vcs.

Aí funcionou. Não descobri ainda qual era o erro.

Sugiro também vocÊs especificarem qual versão do pacote estão instalando durante o curso, pode ter tido alguma incompatibilidade.

Obrigada pelos links, depois que percebi que já tinha no curso, falha minha, mil desculpas.

Se alguém conseguiu resolver e puder dizer o que houve...

Obrigada!

solução!

Boa tarde, Rafaela! Como vai?

Eu percebi que seu código tem um problema em relação ao que o instrutor apresenta durante o curso. Enquanto vc faz:

var correiosSOAPClient = new app.servicos.correiosSOAPClient().correiosSOAPClient
            .calculaPrazo(dadosDaEntrega, function (erro, resultado) {
                 // restante do código omitido.
            });

o instrutor faz:

var correiosSOAPClient = new app.servicos.correiosSOAPClient();
correiosSOAPClient.calculaPrazo(dadosDaEntrega, function (erro, resultado) {
     // restante do código omitido.
});

Dá uma conferida aí e veja se resolve seu problema.

Oi!! Resolveu, muito obigada :D

Por nada, Rafaela! Sempre que tiver qualquer dúvida é só mandar aqui no fórum!

Grande abraço e bons estudos!