Sendgrid-nodejs: UnhandledPromiseRejectionWarning: Fehler: Ungültige Anfrage

Erstellt am 24. Apr. 2019  ·  9Kommentare  ·  Quelle: sendgrid/sendgrid-nodejs

Bekomme folgenden Fehler:

(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.

Mein Code ist in Express und Node als Teil einer nextjs-App:

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 (letzter Commit: [Commit-Nummer])
    "@sendgrid/mail": "^6.3.1",
  • Node.js-Version: v10.14.2
unknown or a waiting for feedback non-library issue

Hilfreichster Kommentar

@AWR14 ,
Ich hatte ein ähnliches Problem und habe es behoben, indem ich sichergestellt habe, dass das E-Mail-Feld from eine gültige E-Mail ist

Alle 9 Kommentare

Hallo @AWR14 ,

Dieser Fehler tritt auf, wenn Sie die Ablehnung der Zusage nicht verarbeiten. Hier ist ein Beispiel.

Vielen Dank!

Mit besten Empfehlungen,

Elmer

@AWR14 ,
Ich hatte ein ähnliches Problem und habe es behoben, indem ich sichergestellt habe, dass das E-Mail-Feld from eine gültige E-Mail ist

@hkadyanji , (und alle anderen, die angebe UND stelle , dass sie mindestens ein Leerzeichen haben - anstatt ein Feld auf "" zu setzen, setze ich es auf " " (Leerzeichen in den Anführungszeichen) und es hat mein Problem gelöst - ich finde das ziemlich seltsam, aber behoben ist besser als kaputt. :) Falls jemand Feedback/Einblicke hat, bin ich gespannt darauf...

Fairerweise habe ich die to: und from: Felder nicht getestet, um Leerzeichen zuzulassen, da sie normalerweise einen Wert in meiner App haben, also sah ich die Notwendigkeit nicht. Ich werde auf der sicheren Seite ausstrahlen und sicherstellen, dass jedes fehlende Feld mindestens ein Leerzeichen hat, bis das Gegenteil in einer zukünftigen Version bewiesen wird. Aber andererseits, wen mache ich Witze; Ich werde diesen Code wahrscheinlich nicht wieder besuchen, bis etwas anderes kaputt geht ... lol

Ich verwende "@sendgrid/mail": "^6.4.0"

wurde das Problem behoben, ich stehe vor dem gleichen Fehler, aber in einem anderen Kontext des Bots.
Es funktioniert gut im Bot-Emulator, aber sobald ich in Azure veröffentliche, erhalte ich diesen Fehler.

BotFrameworkAdapter.processActivity(): 500 FEHLER - Fehler: Bad Request
(node:17240) UnhandledPromiseRejectionWarning: Error: Error: Bad Request

Ich habe dieselbe Warnung angezeigt, aber es war mein Fehler, der ein Tippfehlerproblem verursachte, anstatt text , habe ich test eingegeben.

Damit es wieder funktioniert, stellen Sie sicher, dass die E-Mail-Adresse und die Schlüssel gültig sind.

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

In meinem Fall tritt dieser Fehler auf, weil ich vor der send API Await nicht verwendet habe, was dazu führt, dass der Fehler nicht erkannt wird.

Und der Fehlergrund ist to und cc haben eine Schnittmenge。

Entfernen Sie die wiederholten E-Mails in to und cc kann Ihr Problem lösen :)

Hier gibt es zwei Probleme: schlechte Anfragen stellen und mit Ablehnungen von Versprechen nicht richtig umgehen. Für letzteres müssen Sie entweder das Ergebnis des Sendeversprechens verwenden, um zu bestimmen, wann Sie auf Ihren API-Aufruf antworten, oder async/await . Für ersteres müssen Sie weitere Debug-Logik hinzufügen, um festzustellen, warum die Anforderung _schlecht_ ist. Ich würde damit beginnen, das Nachrichtenobjekt zu protokollieren, das Sie versuchen, im send Aufruf zu übergeben.

Hallo @AWR14 ,

Dieser Fehler tritt auf, wenn Sie die Ablehnung der Zusage nicht verarbeiten. Hier ist ein Beispiel.

Vielen Dank!

Mit besten Empfehlungen,

Elmer

Jetzt ist der neue Link eigentlich dieser: https://github.com/sendgrid/sendgrid-nodejs/blob/master/docs/use-cases/success-failure-errors.md ;)

Aber es ist ein SCHÖNER Tipp, denn jetzt ist es möglich zu verstehen, was der wahre Fehler ist! Danke!

@AWR14 ,
Ich hatte ein ähnliches Problem und habe es behoben, indem ich sichergestellt habe, dass das E-Mail-Feld from eine gültige E-Mail ist

Genau, Sie müssen den E-Mail-Status im Sendgrid-Admin überprüfen

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

Loriot-n picture Loriot-n  ·  4Kommentare

prasoonjalan picture prasoonjalan  ·  3Kommentare

danielflippance picture danielflippance  ·  4Kommentare

zvone187 picture zvone187  ·  4Kommentare

thinkingserious picture thinkingserious  ·  4Kommentare