Sendgrid-nodejs: خطأ في بناء الجملة لم يتم اكتشافه: رمز مميز غير متوقع <(في lib / sendgrid.js يتم تشغيله على كائن استجابة)

تم إنشاؤها على ١٦ نوفمبر ٢٠١٦  ·  10تعليقات  ·  مصدر: sendgrid/sendgrid-nodejs

ملخص القضية

بعد إرسال بريد إلكتروني نموذجي باستخدام أداة مساعد البريد الإلكتروني الخاصة بـ SendGrid. تقوم استجابة الخادم من واجهة برمجة تطبيقات SendGrid بإرجاع JSON غير صالح وفقًا لهذا الغلاف (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)

السطر 110 هو:

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

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

  1. تأكد من حزمة عقدة sendgrid -> "sendgrid": "^ 4.7.1" ،
  2. قم بإنشاء قالب ببدائل في SendGrid وقم بتنشيط هذا القالب
  3. قم بإنشاء بريد إلكتروني كامل للقالب باستخدام مساعد البريد الإلكتروني. تطبيق .toJSON في النهاية.

مثال:

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

يمكنك حتى إنشاء اختبار mocha ، لقد قمت بتشغيل هذا من بيئة الاختبار هذه:

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

تحتوي وظيفة sendEmail على إعداد POST V3 العادي لاستدعاء API كما هو موضح في المستندات.

تفاصيل تقنية:

  • Sendgrid-nodejs الإصدار: 4.7.1
  • إصدار Node.js: 4.6.1
help wanted bug

التعليق الأكثر فائدة

باه! تم الحصول على هذه المشكلة بالضبط لبضع ساعات. تبين أن المسار حساس للشرطة المائلة البادئة.

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

ضد

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

يعمل المقتطف الأول ، بينما سيعطيك المقتطف الثاني خطأ تحليل json :(

لقد مررنا بوقت طويل بعميل sendgrid ، لكننا بدأنا للتو اللعب مع api وهذا lib. ربما هذه التفاصيل موثقة جيداً وأغفلتها؟ سيكون من الجيد أن يقوم lib بوضع بادئة تلقائيًا للشرطة المائلة إذا حذفناها.

ال 10 كومينتر

مرحبا iamgollum ،

نشكرك على الوقت الذي أمضيته في إرسال مشكلة! لقد أضفت هذا إلى تراكم لدينا للمراجعة.

في غضون ذلك ، ربما يساعد هذا: https://github.com/sendgrid/sendgrid-nodejs/blob/master/USE_CASES.md#transactional_templates

شكر!

iamgollum ،

هل ما زلت تواجه مشكلة؟

أواجه هذه المشكلة. وأنا أستخدم نموذج معاملات كما في الرابط الذي نشرته.

حسنًا ، أعتقد أن هذه المشكلة مرتبطة: https://github.com/sendgrid/sendgrid-nodejs/issues/347

سأعيد تصنيف هذا على أنه خطأ وسأفحصه معًا.

adamsingle ،

في غضون ذلك ، هل لديك نموذج رمز يمكننا استخدامه للمساعدة في إعادة الإنتاج؟ شكر!

thinkingserious سأحاول تقديم نموذج رمز في نهاية هذا الأسبوع. سأعود الآن إلى sendgrid في العمل وسأعيد زيارة كل شيء. أعتذر عن السقوط من على وجه الأرض

باه! تم الحصول على هذه المشكلة بالضبط لبضع ساعات. تبين أن المسار حساس للشرطة المائلة البادئة.

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

ضد

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

يعمل المقتطف الأول ، بينما سيعطيك المقتطف الثاني خطأ تحليل json :(

لقد مررنا بوقت طويل بعميل sendgrid ، لكننا بدأنا للتو اللعب مع api وهذا lib. ربما هذه التفاصيل موثقة جيداً وأغفلتها؟ سيكون من الجيد أن يقوم lib بوضع بادئة تلقائيًا للشرطة المائلة إذا حذفناها.

bradseefeld ،

آسف كان عليك التعامل مع ذلك :(

نحن نعمل على مساعد أفضل يخفي كل تلك التفاصيل عنك. لا يجب أن تهتم بأي من المعلمات.

يمكنك متابعة المشروع هنا: https://github.com/sendgrid/sendgrid-nodejs/projects

شكر!

لا داعى للقلق. نحن نحب الخدمة!

المساعد الجديد قيد التطوير هنا: https://github.com/sendgrid/sendgrid-nodejs/pull/378

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

القضايا ذات الصلة

prasoonjalan picture prasoonjalan  ·  3تعليقات

wooyah picture wooyah  ·  4تعليقات

agostonbonomi picture agostonbonomi  ·  3تعليقات

murphman300 picture murphman300  ·  4تعليقات

TobiahRex picture TobiahRex  ·  3تعليقات