Sendgrid-nodejs: Erro de sintaxe não detectado: token inesperado <(em lib / sendgrid.js acionado em um objeto de resposta)

Criado em 16 nov. 2016  ·  10Comentários  ·  Fonte: sendgrid/sendgrid-nodejs

Resumo do problema

Depois de enviar um modelo de e-mail usando o utilitário auxiliar de e-mail do SendGrid. A resposta do servidor da API do SendGrid está retornando JSON inválido de acordo com este wrapper (sendgrid-nodejs).

Uncaught SyntaxError: Unexpected token <
      at Object.parse (native)
      at node_modules/sendgrid/lib/sendgrid.js:110:42
      at IncomingMessage.<anonymous> (node_modules/sendgrid/node_modules/sendgrid-rest/lib/client.js:108:9)
      at endReadableNT (_stream_readable.js:921:12)

Linha 110 é:

  //Use callback
  self.client.API(request, function(response) {
    response.body = response.body ? JSON.parse(response.body) : response.body;

Passos para reproduzir

  1. Certifique-se de que o pacote do nó sendgrid -> "sendgrid": "^ 4.7.1",
  2. Crie um modelo com substituições no SendGrid e ative esse modelo
  3. Crie um e-mail completo para o modelo usando o auxiliar de e-mail. aplique .toJSON no final.

Exemplo:

const BaseWelcomeEmail = (function(){
    const helper = require('sendgrid').mail,
        from_email = new helper.Email(testEmail),
        to_email = new helper.Email(testEmail),
        subject = "Welcome to Bedly",
        content = new helper.Content("text/plain", "hello"),

        mail = new helper.Mail(from_email, subject, to_email, content),
        personalization = new helper.Personalization();

    let substitution = new helper.Substitution(":firstname", "Aaron");

    personalization.addSubstitution(substitution);
    substitution = new helper.Substitution(":lastname", "Elk");
    personalization.addSubstitution(substitution);
    substitution = new helper.Substitution(":address", "96 Washington Avenue");
    personalization.addSubstitution(substitution);
    substitution = new helper.Substitution(":neighborhood", "Washington Heights");
    personalization.addSubstitution(substitution);
    substitution = new helper.Substitution(":unitNumber", "N/A");
    personalization.addSubstitution(substitution);
    substitution = new helper.Substitution(":roomNumber", "2J");
    personalization.addSubstitution(substitution);

    mail.addPersonalization(personalization);

    return mail;
})();

Você pode até criar um teste mocha, eu executei neste ambiente de teste:

    describe('Test Email Template', function () {
        it('test template ${TEMPLATE_ID} is active and is complete', function (done) {
            BaseWelcomeEmail.setTemplateId(TEMPLATE_ID);
            SendEmailImpl.sendEmail(BaseWelcomeEmail.toJSON(), done, function(error, response){
                assert_OKResponse(error, response, done);
            });
        });
    });

A função sendEmail contém a configuração normal do POST V3 para chamar a API conforme descrito nos documentos.

Detalhes técnicos:

  • sendgrid-nodejs Versão: 4.7.1
  • Versão Node.js: 4.6.1
help wanted bug

Comentários muito úteis

Bah! Estou tendo exatamente esse problema há algumas horas. Acontece que o caminho é sensível à barra inicial.

var request = sendgrid.emptyRequest({
    method: 'POST',
    path: '/v3/mail/send',
    body: mail.toJSON()
});

vs

var request = sendgrid.emptyRequest({
   method: 'POST',
   path: 'v3/mail/send',
   body: mail.toJSON()
});

O primeiro snippet funciona, enquanto o segundo fornecerá o erro de análise json :(

Somos clientes do sendgrid há muito tempo, mas acabamos de começar a brincar com a API e esta lib. Talvez este detalhe esteja bem documentado e eu o tenha esquecido? Seria bom que a lib prefixasse automaticamente a barra se a omitirmos.

Todos 10 comentários

Olá @iamgollum ,

Obrigado por enviar um problema! Eu adicionei isso ao nosso backlog para revisão.

Enquanto isso, talvez isso ajude: https://github.com/sendgrid/sendgrid-nodejs/blob/master/USE_CASES.md#transactional_templates

Obrigado!

@iamgollum ,

Você ainda está tendo problemas?

Estou tendo esse problema. E estou usando um modelo transacional como no link que você postou.

Hmm, estou pensando que esse problema está relacionado: https://github.com/sendgrid/sendgrid-nodejs/issues/347

Estou reclassificando este como um bug e verificarei juntos.

@adamsingle ,

Enquanto isso, você tem um exemplo de código que possamos usar para ajudar na reprodução? Obrigado!

@thinkingserious , tentarei fornecer um exemplo de código neste fim de semana. Estou voltando para sendgrid agora no trabalho e vou revisitar tudo. Peço desculpas por cair da face da terra

Bah! Estou tendo exatamente esse problema há algumas horas. Acontece que o caminho é sensível à barra inicial.

var request = sendgrid.emptyRequest({
    method: 'POST',
    path: '/v3/mail/send',
    body: mail.toJSON()
});

vs

var request = sendgrid.emptyRequest({
   method: 'POST',
   path: 'v3/mail/send',
   body: mail.toJSON()
});

O primeiro snippet funciona, enquanto o segundo fornecerá o erro de análise json :(

Somos clientes do sendgrid há muito tempo, mas acabamos de começar a brincar com a API e esta lib. Talvez este detalhe esteja bem documentado e eu o tenha esquecido? Seria bom que a lib prefixasse automaticamente a barra se a omitirmos.

@bradseefeld ,

Desculpe, você teve que lidar com isso :(

Estamos trabalhando em um ajudante melhor que esconde todos esses detalhes de você. Você não deve se preocupar com nenhum dos parâmetros.

Você pode acompanhar o projeto aqui: https://github.com/sendgrid/sendgrid-nodejs/projects

Obrigado!

Não se preocupe. Adoramos o serviço!

O novo auxiliar está em desenvolvimento aqui: https://github.com/sendgrid/sendgrid-nodejs/pull/378

Esta página foi útil?
0 / 5 - 0 avaliações