Sendgrid-nodejs: UnhandledPromiseRejectionWarning: خطأ: طلب غير صالح

تم إنشاؤها على ٢٤ أبريل ٢٠١٩  ·  9تعليقات  ·  مصدر: sendgrid/sendgrid-nodejs

الحصول على الخطأ التالي:

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

الكود الخاص بي في Express و node كجزء من تطبيق 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 الإصدار: رئيسي (أحدث التزام: [رقم التنفيذ])
    "@ sendgrid / mail": "^ 6.3.1"،
  • إصدار Node.js: v10.14.2
unknown or a waiting for feedback non-library issue

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

@ AWR14 ،
كنت أواجه مشكلة مماثلة ، وقمت بإصلاحها من خلال التأكد من أن حقل البريد الإلكتروني from بريد إلكتروني صالح

ال 9 كومينتر

مرحبًا @ AWR14 ،

يحدث هذا الخطأ عندما لا تتعامل مع رفض الوعد. هنا مثال.

شكرا!

مع أطيب التحيات،

إلمر

@ AWR14 ،
كنت أواجه مشكلة مماثلة ، وقمت بإصلاحها من خلال التأكد من أن حقل البريد الإلكتروني from بريد إلكتروني صالح

hkadyanji ، (وأي شخص آخر قادم) من الغريب أنني اكتشفت أنه إذا لم أقدم جميع الحقول فسأحصل على الخطأ - بدلاً من تعيين حقل على "" ، قمت بتعيين إلى "" (مسافة داخل علامتي الاقتباس) وقد حلت مشكلتي - أجد أن هذا غريبًا تمامًا ولكن الإصلاح أفضل من كسره. :) إذا كان لدى أي شخص أي ملاحظات / نظرة ثاقبة ، فأنا حريص على معرفة ...

في الإنصاف ، لم أختبر الحقول إلى: ومن: للسماح بالفراغات لأنها عادةً ما يكون لها قيمة في تطبيقي ، لذا لم أر الحاجة. سأبث على الجانب الآمن وأتأكد فقط من أن أي حقل مفقود به مساحة على الأقل حتى يثبت العكس في إصدار مستقبلي. ولكن مرة أخرى ، من أنا أمزح؟ ليس من المحتمل أن أزور هذا الرمز مرة أخرى حتى ينكسر شيء آخر ... لول

أنا أستخدم "@ sendgrid / mail": "^ 6.4.0"

هل تم حل المشكلة ، أواجه نفس الخطأ ولكن في سياق مختلف للبوت.
إنه يعمل بشكل جيد في bot emulator ولكن بمجرد أن أنشر على azure ، أحصل على هذا الخطأ.

BotFrameworkAdapter.processActivity (): خطأ 500 - خطأ: طلب غير صالح
(العقدة: 17240) UnhandledPromiseRejectionWarning: خطأ: خطأ: طلب غير صالح

لقد تلقيت نفس التحذير ، ولكن كان خطئي هو الذي يحتوي على مشكلة إملائية ، فبدلاً من text ، قمت بكتابته test .

لجعله يعمل مرة أخرى ، تأكد من صلاحية البريد الإلكتروني والمفاتيح.

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

في حالتي ، يحدث هذا الخطأ لأنني لم أستخدم الانتظار قبل send api مما أدى إلى عدم اكتشاف الخطأ.

وسبب الخطأ هو to و cc لدي بعض التقاطع。

إزالة رسائل البريد الإلكتروني المتكررة في to و cc قد تحل مشكلتك :)

هناك مشكلتان هنا: تقديم طلبات سيئة وعدم التعامل مع رفض الوعد بشكل صحيح. بالنسبة إلى الأخير ، ستحتاج إما إلى استخدام نتيجة وعد الإرسال لتحديد وقت الرد على مكالمة واجهة برمجة التطبيقات أو استخدام async/await . بالنسبة للأول ، ستحتاج إلى إضافة المزيد من منطق التصحيح لتحديد سبب الطلب _bad_. سأبدأ بتسجيل كائن الرسالة الذي تحاول تمريره في المكالمة send .

مرحبًا @ AWR14 ،

يحدث هذا الخطأ عندما لا تتعامل مع رفض الوعد. هنا مثال.

شكرا!

مع أطيب التحيات،

إلمر

الآن الرابط الجديد هو هذا ، في الواقع: https://github.com/sendgrid/sendgrid-nodejs/blob/master/docs/use-cases/success-failure-errors.md؛)

لكنها نصيحة جميلة لأنه من الممكن الآن فهم ما هو الخطأ الحقيقي! شكرا!

@ AWR14 ،
كنت أواجه مشكلة مماثلة ، وقمت بإصلاحها من خلال التأكد من أن حقل البريد الإلكتروني from بريد إلكتروني صالح

بالضبط ، يجب عليك التحقق من حالة البريد الإلكتروني داخل مسؤول sendgrid

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

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

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

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

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

Loriot-n picture Loriot-n  ·  4تعليقات

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