Sendgrid-nodejs: Ersetzungen müssen Zeichenfolgen sein, sonst 400 Bad Request beim Senden

Erstellt am 31. Aug. 2016  ·  13Kommentare  ·  Quelle: sendgrid/sendgrid-nodejs

Problemzusammenfassung

Der Versuch, eine E-Mail mit einer Vorlage + Ersetzungen zu senden, die eine Ganzzahl enthalten, führt zu einem 400 Bad Request-Fehler ohne Erklärung.

Schritte zum Reproduzieren

  1. Erstellen Sie eine Vorlage mit einer Ersetzung (z. B. %test% ).
  2. Versuchen Sie, diese Vorlage mit sendgrid-node zu senden, wobei die Ersetzung eine Ganzzahl ist

_Expected_ - E-Mail wird gesendet oder Fehler mit Informationen zum Problem.

_Actual_ - 400 Bad Request ohne Details zum Problem.

SENDMAIL ERROR { statusCode: 400,
  body: '{"errors":[{"message":"Bad Request","field":null,"help":null}]}',
  headers:
   { server: 'nginx',
     date: 'Wed, 31 Aug 2016 14:32:57 GMT',
     'content-type': 'application/json',
     'content-length': '63',
     connection: 'close',
     'x-frame-options': 'DENY' } }

Hier ist ein Codebeispiel:

var mail = new helper.Mail()
mail.setFrom( new helper.Email( '[email protected]' ) )
mail.setTemplateId( "THE_TEMPLATE_ID" )

var personalization = new helper.Personalization()
personalization.addTo( new helper.Email( '[email protected]' ) )
var sub = new helper.Substitution( `%test%`, 42 )
personalization.addSubstitution( sub )
mail.addPersonalization( personalization )

sgClient.API( sgClient.emptyRequest( {
  method: 'POST',
  path: '/v3/mail/send',
  body: mail.toJSON()
} ) ).catch( function( err ) {
  console.error( 'SENDGRID ERROR', err.response )
} )

Der exakt gleiche Code, außer mit '42' anstelle von 42 für die Substitution, funktioniert.

Es wäre zwar super toll, wenn SendGrid selbst nicht so einen Fehler machen würde (oder das Problem in der Fehlermeldung erklären würde, wie welches Feld und dass es nicht akzeptiert wurde, weil es eine Zahl ist), aber ich denke, sendgrid-node könnte / sollte leicht Behandeln Sie es, indem Sie einfach toString () - Ersetzungen ausführen.

Ich bin froh, eine PR einreichen zu können, aber als ich einen fehlgeschlagenen Test schrieb, gab es keine Dokumente zum Ausführen der Tests, und in den Tests sah ich eine Menge Dinge über Testhosts, die ich nicht ausgeführt hätte.

Technische Details:

  • sendgrid-nodejs Version: 2.2.1
  • Node.js Version: 4.1.0
hacktoberfest help wanted community enhancement

Hilfreichster Kommentar

@wizysanjay Rufen Sie toString für Ihre Ersetzungen an, bevor Sie an die Bibliothek übergeben. Zum Beispiel anstelle von:

personalization.addSubstitution( new helper.Substitution( `%number%`, number ) )

Mach das:

personalization.addSubstitution( new helper.Substitution( `%number%`, number.toString() ) )

Alle 13 Kommentare

Hallo @rfunduk ,

Danke für das ausführliche Feedback!

Dies ist ein bekanntes Problem, und das API-Team hat eine Korrektur in seinem Backlog vorgenommen, um eine entsprechende Fehlerzeichenfolge bereitzustellen.

Sie haben Recht, wir müssen dies in der Bibliothek beheben und würden uns über Ihre Pull-Anfrage freuen.

Gerne führe ich Sie durch die Funktionsweise der Tests. Aber zuerst benötigen wir eine signierte CLA: https://github.com/sendgrid/sendgrid-nodejs/blob/master/CONTRIBUTING.md

Vielen Dank!

Ich habe das gleiche Problem. Wie behebe ich das?

Vielen Dank

@wizysanjay Rufen Sie toString für Ihre Ersetzungen an, bevor Sie an die Bibliothek übergeben. Zum Beispiel anstelle von:

personalization.addSubstitution( new helper.Substitution( `%number%`, number ) )

Mach das:

personalization.addSubstitution( new helper.Substitution( `%number%`, number.toString() ) )

+1

Ich habe es. Vielen Dank

Ich kann nicht glauben, dass ich einen Nachmittag mit Debuggen verbracht habe, bevor ich darauf gestoßen bin. Eine substitution must be string Erwähnung in den Dokumenten wäre zumindest nett ... was ich selbst hinzufügen würde, aber an diesem Punkt kann ich nicht einmal finden, wohin das in den Dokumenten führen würde.

Hallo @dangerismycat ,

:( nicht cool. Dies ist hier dokumentiert, aber das ist für Ihren Anwendungsfall nicht hilfreich.

Wir werden dies in die Bibliothek einbauen, damit Sie sich nicht einmal darum kümmern müssen. Ihre Stimme wurde hinzugefügt, um die Priorität zu erhöhen.

Genial, froh, dass es die Priorität erhöht hat. Wenn es eine einfache Lösung ist und Sie mich in die richtige Richtung weisen können (Repo oder Datei), kann ich mich darum kümmern.

@dangerismycat ,

Genial! Das Update würde wahrscheinlich hier gehen.

@thinkingserious Hm… sieht aus wie der Build fehlgeschlagen ist. Gibt es zugehörige Tests, die ich aktualisieren muss, oder etwas anderes?

Mit Travis CI-Builds für diejenigen, die nicht zur SendGrid-Organisation gehören, ist etwas nicht in Ordnung. Ich bin nicht ganz sicher, was los ist, aber ich werde vor Ort überprüfen.

Hey, ich bekomme dieses Problem immer noch auf
Das Senden, während sub eine Ganzzahl ist, funktioniert nicht und gibt

body: {
  personalizations: [{
    to: [{
      email: userEmail
    }],
    subject: `blah blah blah`,
    substitutions: {
      '{{sub}}': sub
    }
  }],
  from: {
    email: '[email protected]',
    name: 'blah blah'
  },
  template_id
}
err { Error: Bad Request
    at Request.http [as _callback] (node_modules/@sendgrid/client/src/classes/client.js:124:25)
    at Request.self.callback (node_modules/request/request.js:186:22)
    at emitTwo (events.js:126:13)
    at Request.emit (events.js:214:7)
    at Request.<anonymous> (node_modules/request/request.js:1163:10)
    at emitOne (events.js:116:13)
    at Request.emit (events.js:211:7)
    at IncomingMessage.<anonymous> (node_modules/request/request.js:1085:12)
    at Object.onceWrapper (events.js:313:30)
    at emitNone (events.js:111:20)
    at IncomingMessage.emit (events.js:208:7)
    at endReadableNT (_stream_readable.js:1055:12)
    at _combinedTickCallback (internal/process/next_tick.js:138:11)
    at process._tickDomainCallback (internal/process/next_tick.js:218:9)
  code: 400,
  message: 'Bad Request',
  response: 
   { headers: 
      { server: 'nginx',
        date: 'Fri, 20 Apr 2018 16:17:42 GMT',
        'content-type': 'application/json',
        'content-length': '63',
        connection: 'close',
        'access-control-allow-origin': 'https://sendgrid.api-docs.io',
        'access-control-allow-methods': 'POST',
        'access-control-allow-headers': 'Authorization, Content-Type, On-behalf-of, x-sg-elas-acl',
        'access-control-max-age': '600',
        'x-no-cors-reason': 'https://sendgrid.com/docs/Classroom/Basics/API/cors.html' },
     body: { errors: [Array] } } }
where the errors: array is [ { message: 'Bad Request', field: null, help: null } ]

Wenn ich jedoch das Sub in der Anfrage in ${sub} ändere, funktioniert es

Grüße

Hallo @Mauyeung ,

Würde es Ihnen etwas ausmachen, eine neue Ausgabe zu eröffnen? Vielen Dank!

Es sieht so aus, als ob dies ein Fehler sein könnte, da ich sehe, dass wir das unter der Haube in einen String für Sie umwandeln sollen.

Mit besten Empfehlungen,

Elmer

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen