Sendgrid-nodejs: Substitusi harus berupa string, jika tidak 400 Permintaan Buruk saat mengirim

Dibuat pada 31 Agu 2016  ·  13Komentar  ·  Sumber: sendgrid/sendgrid-nodejs

Ringkasan Masalah

Mencoba mengirim email menggunakan templat + substitusi yang menyertakan bilangan bulat memberikan kesalahan 400 Permintaan Buruk tanpa penjelasan.

Langkah-langkah untuk Mereproduksi

  1. Buat template dengan substitusi (misalnya %test% )
  2. Mencoba mengirim template itu menggunakan sendgrid-node di mana substitusinya adalah bilangan bulat

_Expected_ - Email dikirim, atau error dengan info tentang masalah tersebut.

_Actual_ - 400 Permintaan Buruk tanpa rincian masalah.

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' } }

Berikut adalah contoh kode:

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

Kode yang sama persis kecuali dengan '42' bukan 42 untuk pekerjaan substitusi.

Meskipun akan sangat bagus jika SendGrid sendiri tidak melakukan kesalahan seperti ini (atau akan menjelaskan masalah dalam pesan kesalahan, seperti bidang mana dan itu tidak diterima karena itu angka), saya pikir sendgrid-node bisa / harus dengan mudah menanganinya hanya dengan substitusi toString () - ing.

Senang untuk mengirimkan PR, tetapi ketika saya pergi dan menulis tes yang gagal tidak ada dokumen tentang cara menjalankan tes, dan dalam tes saya melihat banyak hal tentang host tes yang tidak akan saya jalankan.

Detail teknis:

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

Komentar yang paling membantu

@wizysanjay panggil toString untuk substitusi Anda sebelum meneruskan ke perpustakaan. Misalnya, bukan:

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

Melakukan hal ini:

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

Semua 13 komentar

Hai @runduk ,

Terima kasih atas masukan mendetail!

Ini adalah masalah yang diketahui dan tim API telah memperbaiki backlog mereka untuk memberikan string kesalahan yang sesuai.

Anda benar, kami perlu memperbaikinya di perpustakaan dan kami akan senang dengan permintaan penarikan Anda.

Saya akan dengan senang hati memandu Anda tentang cara kerja tes. Tetapi pertama-tama, kami memerlukan CLA yang ditandatangani: https://github.com/sendgrid/sendgrid-nodejs/blob/master/CONTRIBUTING.md

Terima kasih!

Saya punya masalah yang sama. Bagaimana cara memperbaikinya

Terima kasih

@wizysanjay panggil toString untuk substitusi Anda sebelum meneruskan ke perpustakaan. Misalnya, bukan:

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

Melakukan hal ini:

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

+1

Saya mendapatkannya. Terima kasih

Saya tidak percaya saya menghabiskan sore untuk debugging sebelum saya menemukan ini. A substitution must be string sebutan di dokumen setidaknya akan menyenangkan… yang akan saya tambahkan sendiri, tetapi pada titik ini saya bahkan tidak dapat menemukan ke mana hal itu akan masuk di dokumen.

Hai @dismycic ,

:( tidak keren. Ini didokumentasikan di sini , tapi itu tidak berguna untuk kasus penggunaan Anda.

Kami akan membangun ini ke dalam perpustakaan sehingga Anda bahkan tidak perlu khawatir tentang itu. Pilihan Anda telah ditambahkan untuk membantu meningkatkan prioritas.

Luar biasa, senang itu meningkatkan prioritas. Jika ini perbaikan sederhana dan Anda dapat mengarahkan saya ke arah yang benar (repo atau file), saya dapat mengatasinya.

@bayu_joo

Hebat! Perbaikan kemungkinan besar akan dilakukan di sini .

@thinkingserious Hm… sepertinya

Ada yang salah dengan build Travis CI untuk mereka yang tidak berada di organisasi SendGrid. Saya tidak yakin apa yang sedang terjadi, tetapi saya akan memverifikasi secara lokal.

Hai, masih mendapatkan masalah ini di "@ sendgrid / client": "^ 6.2.1" .
Mengirim ini sementara sub adalah bilangan bulat tidak berfungsi dan memberi

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 } ]

Namun, ketika saya mengubah sub dalam permintaan menjadi ${sub} , itu akan berhasil

Salam

Halo @Mauyeung ,

Maukah Anda membuka terbitan baru? Terima kasih!

Sepertinya ini mungkin bug, karena saya melihat bahwa kami seharusnya mengubahnya menjadi string untuk Anda di bawah tenda.

Salam hangat,

Elmer

Apakah halaman ini membantu?
0 / 5 - 0 peringkat