Sendgrid-nodejs: Erreur de syntaxe non interceptée: jeton inattendu <(dans lib / sendgrid.js déclenché sur un objet de réponse)

Créé le 16 nov. 2016  ·  10Commentaires  ·  Source: sendgrid/sendgrid-nodejs

Résumé de la question

Après avoir envoyé un e-mail basé sur un modèle à l'aide de l'utilitaire d'assistance de messagerie de SendGrid. La réponse du serveur de l'API de SendGrid renvoie un JSON non valide selon ce 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)

La ligne 110 est:

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

Étapes à suivre pour reproduire

  1. Assurez-vous que le paquet de nœuds sendgrid -> "sendgrid": "^ 4.7.1",
  2. Créez un modèle avec des substitutions dans SendGrid et activez ce modèle
  3. Créez un e-mail complet pour le modèle à l'aide de l'assistant de messagerie. appliquer .toJSON à la fin.

Exemple:

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

Vous pouvez même créer un test moka, j'ai exécuté ceci à partir de cet environnement de test:

    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 fonction sendEmail contient la configuration POST V3 normale pour appeler les API décrites dans les documents.

Détails techniques:

  • sendgrid-nodejs Version: 4.7.1
  • Version de Node.js: 4.6.1
help wanted bug

Commentaire le plus utile

Bah! J'ai eu ce problème exact pendant quelques heures. Il s'avère que le chemin est sensible à la barre oblique principale.

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

contre

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

Le premier extrait de code fonctionne, tandis que le second vous donnera l'erreur d'analyse json :(

Nous sommes un client de sendgrid depuis longtemps, mais nous venons de commencer à jouer avec l'API et cette bibliothèque. Peut-être que ce détail est bien documenté et que je l'ai oublié? Ce serait bien que la bibliothèque préfixe automatiquement la barre oblique si nous l'omettons.

Tous les 10 commentaires

Bonjour @iamgollum ,

Merci d'avoir pris le temps de soumettre un problème! J'ai ajouté cela à notre arriéré pour examen.

En attendant, cela aidera peut-être: https://github.com/sendgrid/sendgrid-nodejs/blob/master/USE_CASES.md#transactional_templates

Merci!

@iamgollum ,

Avez-vous toujours un problème?

J'ai ce problème. Et j'utilise un modèle transactionnel comme dans le lien que vous avez publié.

Hmm, je pense que ce problème est lié: https://github.com/sendgrid/sendgrid-nodejs/issues/347

Je reclassifie celui-ci en tant que bogue et je vais les vérifier ensemble.

@adamsingle ,

En attendant, avez-vous un exemple de code que nous pouvons utiliser pour aider à reproduire? Merci!

@thinkingserious Je vais essayer de fournir un exemple de code ce week-end. Je reviens à sendgrid maintenant au travail et je vais tout revoir. Je m'excuse d'être tombé de la surface de la terre

Bah! J'ai eu ce problème exact pendant quelques heures. Il s'avère que le chemin est sensible à la barre oblique principale.

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

contre

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

Le premier extrait de code fonctionne, tandis que le second vous donnera l'erreur d'analyse json :(

Nous sommes un client de sendgrid depuis longtemps, mais nous venons de commencer à jouer avec l'API et cette bibliothèque. Peut-être que ce détail est bien documenté et que je l'ai oublié? Ce serait bien que la bibliothèque préfixe automatiquement la barre oblique si nous l'omettons.

@bradseefeld ,

Désolé, vous avez dû vous en occuper :(

Nous travaillons sur une meilleure aide qui vous cache tous ces détails. Vous ne devriez avoir à vous soucier d'aucun des paramètres.

Vous pouvez suivre le projet ici: https://github.com/sendgrid/sendgrid-nodejs/projects

Merci!

Pas de soucis. Nous adorons le service!

Le nouvel assistant est en développement ici: https://github.com/sendgrid/sendgrid-nodejs/pull/378

Cette page vous a été utile?
0 / 5 - 0 notes