Sendgrid-nodejs: UnhandledPromiseRejectionWarning : Erreur : Requête incorrecte

Créé le 24 avr. 2019  ·  9Commentaires  ·  Source: sendgrid/sendgrid-nodejs

Obtention de l'erreur suivante :

(node:1475) UnhandledPromiseRejectionWarning: 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:185:22)
    at Request.emit (events.js:182:13)
    at Request.<anonymous> (node_modules/request/request.js:1161:10)
    at Request.emit (events.js:182:13)
    at IncomingMessage.<anonymous> (node_modules/request/request.js:1083:12)
    at Object.onceWrapper (events.js:273:13)
    at IncomingMessage.emit (events.js:187:15)
    at endReadableNT (_stream_readable.js:1094:12)
    at process._tickCallback (internal/process/next_tick.js:63:19)
(node:1475) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:1475) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

Mon code est en express et node dans le cadre d'une application nextjs :

const express = require('express')
const next = require('next')
const bodyParser = require('body-parser')
const sgMail = require('@sendgrid/mail');

const dev = process.env.NODE_ENV !== 'production'
const app = next({ dev })
const handle = app.getRequestHandler()

sgMail.setApiKey(myKey);

const send = ({ email, name, text }) => {
  const message = {
    to: '[email protected]',
    from: email,
    subject: 'New message from',
    text: text,
  }

  return new Promise((resolve, reject) => {
    sgMail.send(message, (error, info) =>
      error ? reject(error) : resolve(info)
    )
  })
}

app.prepare().then(() => {
  const server = express()

  server.use(bodyParser.json())

  server.get('*', (req, res) => {
    return handle(req, res)
  })

  server.post('/api/contact', (req, res) => {
    const { email, name, message } = req.body
    send(email, name, message)
    res.send('success')
  })

  server.listen(3000, (err) => {
    if (err) throw err
    console.log('> Read on http://localhost:3000')
  })
})
  • sendgrid-nodejs Version : master (dernier commit : [numéro de validation])
    "@sendgrid/mail": "^6.3.1",
  • Version de Node.js : v10.14.2
unknown or a waiting for feedback non-library issue

Commentaire le plus utile

@AWR14 ,
J'étais confronté à un problème similaire et je l'ai résolu en m'assurant que le champ d'e-mail from est un e-mail valide

Tous les 9 commentaires

Bonjour @AWR14 ,

Cette erreur se produit lorsque vous ne gérez pas le rejet de la promesse. Voici un exemple.

Merci!

Meilleures salutations,

Elmer

@AWR14 ,
J'étais confronté à un problème similaire et je l'ai résolu en m'assurant que le champ d'e-mail from est un e-mail valide

@hkadyanji , (et toute autre personne à venir) assez curieusement, j'ai découvert que si je ne fournis pas tous les champs ET m'assure qu'ils ont au moins un espace, j'obtiens l'erreur - au lieu de définir un champ sur "", je mets à " " (espace à l'intérieur des guillemets) et cela a résolu mon problème - je trouve cela assez étrange mais mieux vaut réparer que casser. :) Si quelqu'un a des commentaires / idées, je suis impatient de savoir...

En toute honnêteté, je n'ai pas testé les champs to: and from: pour autoriser les blancs car ils ont généralement une valeur dans mon application, donc je n'en ai pas vu le besoin. Je vais diffuser du bon côté et m'assurer simplement que tout champ manquant a au moins un espace jusqu'à preuve du contraire dans une future version. Mais encore une fois, de qui je plaisante ; Je ne suis pas susceptible de visiter à nouveau ce code jusqu'à ce que quelque chose d'autre se casse... lol

J'utilise "@sendgrid/mail": "^6.4.0"

le problème a-t-il été résolu, je suis confronté à la même erreur mais dans un contexte différent du bot.
Cela fonctionne bien dans l'émulateur de bot, mais une fois que je publie sur Azure, j'obtiens cette erreur.

BotFrameworkAdapter.processActivity() : 500 ERREUR - Erreur : Requête incorrecte
(nœud : 17240) UnhandledPromiseRejectionWarning : Erreur : Erreur : Demande incorrecte

J'ai frappé le même avertissement, mais c'était mon erreur qui a un problème de faute de frappe, au lieu de text , je l'ai tapé test .

Pour que cela fonctionne à nouveau, assurez-vous que l'e-mail et les clés sont valides.

const msg = {
  to: '[email protected]',
  from: '[email protected]',
  subject: 'Hello world',
  text: 'Hello plain world!',
  html: '<p>Hello HTML world!</p>',
};

Dans mon cas, cette erreur se produit parce que je n'ai pas utilisé wait avant send api, ce qui a pour conséquence de ne pas détecter l'erreur.

Et, la raison de l'erreur est to et cc ont une intersection。

Supprimez les e-mails répétés dans to et cc peuvent résoudre votre problème :)

Il y a 2 problèmes ici : faire de mauvaises demandes et ne pas gérer correctement les refus de promesses. Pour ce dernier, vous devrez soit utiliser le résultat de la promesse d'envoi pour déterminer quand répondre à votre appel d'API, soit utiliser async/await . Pour le premier, vous devrez ajouter plus de logique de débogage pour déterminer pourquoi la requête est _mauvaise_. Je commencerais par enregistrer l'objet de message que vous essayez de transmettre dans l'appel send .

Bonjour @AWR14 ,

Cette erreur se produit lorsque vous ne gérez pas le rejet de la promesse. Voici un exemple.

Merci!

Meilleures salutations,

Elmer

Maintenant, le nouveau lien est celui-ci, en fait : https://github.com/sendgrid/sendgrid-nodejs/blob/master/docs/use-cases/success-failure-errors.md ;)

Mais c'est un BEAU conseil car il est maintenant possible de comprendre quelle est la véritable erreur ! Merci !

@AWR14 ,
J'étais confronté à un problème similaire et je l'ai résolu en m'assurant que le champ d'e-mail from est un e-mail valide

Exactement, vous devez vérifier le statut de l'e-mail dans l'administrateur de sendgrid

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

kiranshashiny picture kiranshashiny  ·  4Commentaires

wooyah picture wooyah  ·  4Commentaires

thidasapankaja picture thidasapankaja  ·  4Commentaires

Loriot-n picture Loriot-n  ·  4Commentaires

amlcodes picture amlcodes  ·  4Commentaires