Sendgrid-nodejs: ν¬μ°©λ˜μ§€ μ•Šμ€ ꡬ문 였λ₯˜ : 예기치 μ•Šμ€ 토큰 <(응닡 κ°μ²΄μ—μ„œ 트리거 된 lib / sendgrid.jsμ—μ„œ)

에 λ§Œλ“  2016λ…„ 11μ›” 16일  Β·  10μ½”λ©˜νŠΈ  Β·  좜처: sendgrid/sendgrid-nodejs

문제 μš”μ•½

SendGrid의 이메일 λ„μš°λ―Έ μœ ν‹Έλ¦¬ν‹°λ₯Ό μ‚¬μš©ν•˜μ—¬ ν…œν”Œλ¦Ώ 이메일을 보낸 ν›„. SendGrid API의 μ„œλ²„ 응닡이이 래퍼 (sendgrid-nodejs)에 따라 잘λͺ»λœ JSON을 λ°˜ν™˜ν•©λ‹ˆλ‹€.

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 ν•¨μˆ˜μ—λŠ” λ¬Έμ„œμ— μ„€λͺ… λœλŒ€λ‘œ APIλ₯Ό ν˜ΈμΆœν•˜κΈ°μœ„ν•œ 일반적인 POST V3 섀정이 ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

기술적 μ„ΈλΆ€ 사항:

  • sendgrid-nodejs 버전 : 4.7.1
  • Node.js 버전 : 4.6.1
help wanted bug

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

Bah! 이 μ •ν™•ν•œ λ¬Έμ œκ°€ λͺ‡ μ‹œκ°„ λ™μ•ˆ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€. κ²½λ‘œκ°€ μ„ ν–‰ μŠ¬λž˜μ‹œμ— λ―Όκ°ν•˜λ‹€λŠ” 것이 λ°ν˜€μ‘ŒμŠ΅λ‹ˆλ‹€.

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

vs

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둜 λŒμ•„μ˜€κ³  λͺ¨λ“  것을 λ‹€μ‹œ λ°©λ¬Έ ν•  κ²ƒμž…λ‹ˆλ‹€. μ§€κ΅¬μƒμ—μ„œ λ–¨μ–΄μ Έμ„œ μ£„μ†‘ν•©λ‹ˆλ‹€

Bah! 이 μ •ν™•ν•œ λ¬Έμ œκ°€ λͺ‡ μ‹œκ°„ λ™μ•ˆ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€. κ²½λ‘œκ°€ μ„ ν–‰ μŠ¬λž˜μ‹œμ— λ―Όκ°ν•˜λ‹€λŠ” 것이 λ°ν˜€μ‘ŒμŠ΅λ‹ˆλ‹€.

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

vs

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 λ“±κΈ‰