Sendgrid-nodejs: As substituições devem ser strings, caso contrário, 400 Bad Request ao enviar

Criado em 31 ago. 2016  ·  13Comentários  ·  Fonte: sendgrid/sendgrid-nodejs

Resumo do problema

Tentar enviar um e-mail usando um modelo + substituições que incluem um inteiro dá um erro 400 Bad Request sem explicação.

Passos para reproduzir

  1. Crie um modelo com uma substituição (por exemplo, %test% )
  2. Tente enviar esse modelo usando sendgrid-node onde a substituição é um inteiro

_Esperado_ - E-mail enviado ou erro com informações sobre o problema.

_Actual_ - 400 Bad Request sem detalhes quanto ao problema.

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

Aqui está um exemplo de código:

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

Exatamente o mesmo código, exceto com '42' vez de 42 para a substituição funciona.

Embora fosse muito bom se o SendGrid em si não tivesse um erro assim (ou explicasse o problema na mensagem de erro, como qual campo e que não foi aceito porque é um número), acho que o sendgrid-node poderia / deveria facilmente lidar com isso apenas toString () - fazendo substituições.

Fico feliz em enviar um PR, mas quando fui escrever um teste reprovado, não havia documentos sobre como executar os testes, e nos testes vi muitas coisas sobre hosts de teste que não teria executado.

Detalhes técnicos:

  • Versão sendgrid-nodejs: 2.2.1
  • Versão Node.js: 4.1.0
hacktoberfest help wanted community enhancement

Comentários muito úteis

@wizysanjay chame toString em suas substituições antes de passar para a biblioteca. Por exemplo, em vez de:

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

Faça isso:

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

Todos 13 comentários

Olá @rfunduk ,

Obrigado pelo feedback detalhado!

Este é um problema conhecido e a equipe da API corrigiu seu backlog para fornecer uma string de erro apropriada.

Você está correto, precisamos que isso seja consertado na biblioteca e adoraríamos sua solicitação de pull.

Fico feliz em explicar como os testes funcionam. Mas, primeiro, precisaremos de um CLA assinado: https://github.com/sendgrid/sendgrid-nodejs/blob/master/CONTRIBUTING.md

Obrigado!

Eu tenho o mesmo problema. Como faço para corrigir isso

obrigado

@wizysanjay chame toString em suas substituições antes de passar para a biblioteca. Por exemplo, em vez de:

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

Faça isso:

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

+1

Deixa comigo. obrigado

Eu não posso acreditar que passei uma tarde depurando antes de encontrar isso. Uma menção de substitution must be string nos documentos, pelo menos, seria bom ... o que eu mesmo acrescentaria, mas neste ponto não consigo nem descobrir para onde isso iria nos documentos.

Olá @dangerismycat ,

:( não é legal. Isso está documentado aqui , mas não é útil para seu caso de uso.

Vamos construir isso na biblioteca, então você não precisa nem se preocupar com isso. Seu voto foi adicionado para ajudar a aumentar a prioridade.

Incrível, que bom que aumentou a prioridade. Se for uma solução simples e você puder me indicar a direção certa (repositório ou arquivo), posso cuidar disso.

@dangerismycat ,

Impressionante! A correção provavelmente estaria aqui .

@thinkingserious Hm… parece que a compilação falhou. Há testes associados que preciso atualizar ou algo mais?

Algo está errado com as compilações do Travis CI para quem não está na organização SendGrid. Não tenho certeza do que está acontecendo, mas vou verificar localmente.

Ei, ainda estou tendo esse problema em
Enviar enquanto sub é um inteiro não funciona e dá

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

No entanto, quando eu mudar o sub na solicitação para ${sub} , ele funcionará

Saudações

Olá @Mauyeung ,

Você se importaria de abrir uma nova edição? Obrigado!

Parece que isso pode ser um bug, pois vejo que devemos convertê-lo em uma string para você nos bastidores.

Obrigado pela atenção,

Elmer

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

Chrischuck picture Chrischuck  ·  3Comentários

thidasapankaja picture thidasapankaja  ·  4Comentários

agostonbonomi picture agostonbonomi  ·  3Comentários

thinkingserious picture thinkingserious  ·  4Comentários

amlcodes picture amlcodes  ·  4Comentários