Sendgrid-nodejs: 置換は文字列である必要があります。そうでない場合、送信時に400 Bad Request

作成日 2016年08月31日  ·  13コメント  ·  ソース: sendgrid/sendgrid-nodejs

問題の概要

テンプレートと整数を含む置換を使用して電子メールを送信しようとすると、説明なしで400 BadRequestエラーが発生します。

再現する手順

  1. 置換を使用してテンプレートを作成します(例: %test%
  2. 置換が整数であるsendgrid-nodeを使用してそのテンプレートを送信しようとします

_Expected_-電子メールが送信されるか、問題に関する情報を含むエラーが発生します。

_Actual_-問題に関する詳細のない400の不正な要求。

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

コード例は次のとおりです。

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

置換のための42代わりに'42'を除いて、まったく同じコードが機能します。

SendGrid自体がこのようにエラーにならない(または、どのフィールドであるか、数値であるために受け入れられなかったなど、エラーメッセージで問題を説明する)のは非常に素晴らしいことですが、sendgrid-nodeは簡単にできる/すべきだと思いますtoString()-ing置換だけで処理します。

PRを提出してよかったのですが、失敗したテストを書きに行ったとき、テストの実行方法に関するドキュメントはありませんでした。テストでは、実行しなかったテストホストに関する多くの情報を確認しました。

技術的な詳細:

  • sendgrid-nodejsバージョン:2.2.1
  • Node.jsバージョン:4.1.0
hacktoberfest help wanted community enhancement

最も参考になるコメント

@wizysanjayは、ライブラリに渡す前に、置換toStringを呼び出します。 たとえば、次の代わりに:

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

これを行う:

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

全てのコメント13件

こんにちは@rfunduk

詳細なフィードバックをありがとう!

これは既知の問題であり、APIチームは、適切なエラー文字列を提供するためにバックログを修正しています。

あなたは正しいです、私たちはこれをライブラリで修正する必要があります、そして私たちはあなたのプルリクエストを歓迎します。

テストがどのように機能するかをご案内させていただきます。 ただし、最初に、署名されたCLAが必要になります: https

ありがとう!

同じ問題が発生しました。 これを修正するにはどうすればよいですか

ありがとう

@wizysanjayは、ライブラリに渡す前に、置換toStringを呼び出します。 たとえば、次の代わりに:

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

これを行う:

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

+1

わかった。 ありがとう

これに出くわす前に、午後のデバッグに費やしたなんて信じられません。 少なくともドキュメントでのsubstitution must be string言及は素晴らしいでしょう…私は自分で追加しますが、現時点では、それがドキュメントのどこに行くのかさえわかりません。

こんにちは@dangerismycat

:(クールではありません。これはここに記載さ

これをライブラリに組み込むので、心配する必要はありません。 優先度を上げるために投票が追加されました。

素晴らしい、優先順位が上がってよかった。 それが簡単な修正であり、あなたが私を正しい方向(レポまたはファイル)に向けることができれば、私はそれを世話することができます。

@dangerismycat

驚くばかり! 修正はおそらくここに行き

@thinkingseriousうーん…ビルドが失敗したようです。 更新する必要のある関連テスト、または他に何かありますか?

SendGrid組織に属していない人のためのTravisCIビルドで何かがおかしいです。 何が起こっているのかよくわかりませんが、ローカルで確認します。

ねえ、まだ「@ sendgrid / client」でこの問題が発生してい
subが整数のときにこれを送信しても機能せず、

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

ただし、リクエストのsubを${sub} 、機能します

よろしく

こんにちは@Mauyeung

新しい号を開いていただけませんか。 ありがとう!

これはバグかもしれ好きなようにそれは、見えます私が見る私たちはボンネットの下にあなたのための文字列にそれを変換することになっていること。

敬具、

エルマー

このページは役に立ちましたか?
0 / 5 - 0 評価