Sendgrid-nodejs: Error de sintaxis no detectado: token inesperado <(en lib / sendgrid.js activado en un objeto de respuesta)

Creado en 16 nov. 2016  ·  10Comentarios  ·  Fuente: sendgrid/sendgrid-nodejs

Resumen de asuntos

Después de enviar un correo electrónico con plantilla utilizando la utilidad de ayuda de correo electrónico de SendGrid. La respuesta del servidor de la API de SendGrid devuelve JSON no válido de acuerdo con este contenedor (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)

La línea 110 es:

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

Pasos para reproducir

  1. Asegúrese de que el paquete del nodo sendgrid -> "sendgrid": "^ 4.7.1",
  2. Cree una plantilla con sustituciones en SendGrid y active esa plantilla
  3. Cree un correo electrónico completo para la plantilla utilizando el asistente de correo electrónico. aplicar .toJSON al final.

Ejemplo:

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;
})();

Incluso puede crear una prueba de moca, ejecuté esto desde este entorno de prueba:

    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);
            });
        });
    });

La función sendEmail contiene la configuración normal de POST V3 para llamar a la API como se describe en los documentos.

Detalles técnicos:

  • sendgrid-nodejs Versión: 4.7.1
  • Versión de Node.js: 4.6.1
help wanted bug

Comentario más útil

¡Bah! He tenido este problema exacto durante unas horas. Resulta que la ruta es sensible a la barra inclinada.

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()
});

El primer fragmento funciona, mientras que el segundo le dará el error de análisis json :(

Hemos sido clientes de sendgrid durante mucho tiempo, pero recién comenzamos a jugar con la API y esta biblioteca. ¿Quizás este detalle está bien documentado y lo he pasado por alto? Sería bueno que la biblioteca prefijara automáticamente la barra si la omitimos.

Todos 10 comentarios

Hola @iamgollum ,

Gracias por tomarse el tiempo para enviar un problema. He agregado esto a nuestra lista de trabajos pendientes para su revisión.

Mientras tanto, tal vez esto ayude: https://github.com/sendgrid/sendgrid-nodejs/blob/master/USE_CASES.md#transactional_templates

¡Gracias!

@iamgollum ,

¿Sigues teniendo algún problema?

Tengo este problema. Y estoy usando una plantilla transaccional como en el enlace que publicaste.

Hmm, creo que este problema está relacionado: https://github.com/sendgrid/sendgrid-nodejs/issues/347

Estoy reclasificando este como un error y los comprobaré juntos.

@adamsingle ,

Mientras tanto, ¿tienes una muestra de código que podamos usar para ayudar a reproducir? ¡Gracias!

@thinkingserious Intentaré proporcionar una muestra de código este fin de semana. Vuelvo a sendgrid ahora en el trabajo y voy a revisar todo. Me disculpo por caerme de la faz de la tierra

¡Bah! He tenido este problema exacto durante unas horas. Resulta que la ruta es sensible a la barra inclinada.

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()
});

El primer fragmento funciona, mientras que el segundo le dará el error de análisis json :(

Hemos sido clientes de sendgrid durante mucho tiempo, pero recién comenzamos a jugar con la API y esta biblioteca. ¿Quizás este detalle está bien documentado y lo he pasado por alto? Sería bueno que la biblioteca prefijara automáticamente la barra si la omitimos.

@bradseefeld ,

Lamento que hayas tenido que lidiar con eso :(

Estamos trabajando en un mejor ayudante que le oculte todos esos detalles. No debería tener que preocuparse por ninguno de los parámetros.

Puedes seguir el proyecto aquí: https://github.com/sendgrid/sendgrid-nodejs/projects

¡Gracias!

No te preocupes. ¡Nos encanta el servicio!

El nuevo ayudante está en desarrollo aquí: https://github.com/sendgrid/sendgrid-nodejs/pull/378

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

umarhussain15 picture umarhussain15  ·  3Comentarios

danielflippance picture danielflippance  ·  4Comentarios

amlcodes picture amlcodes  ·  4Comentarios

thidasapankaja picture thidasapankaja  ·  4Comentarios

Loriot-n picture Loriot-n  ·  4Comentarios