Sendgrid-nodejs: يجب أن تكون البدائل عبارة عن سلاسل ، وإلا 400 طلب غير صالح عند الإرسال

تم إنشاؤها على ٣١ أغسطس ٢٠١٦  ·  13تعليقات  ·  مصدر: sendgrid/sendgrid-nodejs

ملخص القضية

محاولة إرسال بريد إلكتروني باستخدام قالب + بدائل تتضمن عددًا صحيحًا يعطي خطأ 400 طلب سيئ بدون تفسير.

خطوات التكاثر

  1. إنشاء قالب مع بديل (مثل %test% )
  2. حاول إرسال هذا القالب باستخدام عقدة sendgrid حيث يكون الاستبدال عددًا صحيحًا

_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 يمكن / ينبغي بسهولة التعامل معها فقط من خلال الاستبدالات 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://github.com/sendgrid/sendgrid-nodejs/blob/master/CONTRIBUTING.md

شكر!

لدي نفس المشكلة. كيف يمكنني حل هذه المشكلة

شكر

wizysanjay اتصل بـ toString عند الاستبدالات قبل المرور إلى المكتبة. على سبيل المثال بدلاً من:

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

افعل هذا:

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

+1

فهمتها. شكر

لا أصدق أنني قضيت فترة بعد الظهر في تصحيح الأخطاء قبل أن أصادف هذا. سيكون ذكر substitution must be string في المستندات أمرًا رائعًا على الأقل… والذي أود إضافته بنفسي ، لكن في هذه المرحلة لا يمكنني حتى العثور على المكان الذي سيذهب إليه ذلك في المستندات.

مرحبا dangerismycat ،

:( ليس رائعًا. هذا موثق هنا ، لكن هذا ليس مفيدًا لحالة الاستخدام الخاصة بك.

سنقوم ببناء هذا في المكتبة حتى لا داعي للقلق بشأنه. تمت إضافة تصويتك للمساعدة في زيادة الأولوية.

رائع ، سعيد لأنه رفع الأولوية. إذا كان إصلاحًا بسيطًا ويمكنك توجيهي في الاتجاه الصحيح (الريبو أو الملف) ، فيمكنني الاهتمام به.

MustafaHosny اللهم امين

مدهش! من المرجح أن يذهب الإصلاح هنا .

thinkingserious Hm… يبدو أن البناء فشل. هل هناك اختبارات مرتبطة أحتاج إلى تحديثها ، أو أي شيء آخر؟

كان هناك شيء خاطئ مع تصميمات Travis CI لأولئك الذين ليسوا في منظمة SendGrid. لست متأكدًا تمامًا مما يحدث ، لكنني سأتحقق محليًا.

مرحبًا ، ما زلت أتلقى هذه المشكلة على "@ sendgrid / client": "^ 6.2.1" .
إرسال هذا بينما 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} ، فسوف يعمل

مع تحياتي

مرحبا Mauyeung ،

هل تمانع في فتح عدد جديد؟ شكر!

يبدو أن هذا قد يكون خطأ ، حيث أرى أنه من المفترض أن نقوم بتحويل ذلك إلى سلسلة من أجلك تحت الغطاء.

مع أحر تحياتي،

إلمر

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات