Sendgrid-nodejs: UnhandledPromiseRejectionWarning: ошибка: неверный запрос

Созданный на 24 апр. 2019  ·  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.

Мой код находится в экспрессе и узле как часть приложения 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 Версия: master (последняя фиксация: [номер фиксации])
    "@ 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 (и все остальные), как ни странно, я обнаружил, что если я не предоставлю все поля И не гарантирую, что у них хотя бы есть пробел, я получаю сообщение об ошибке - вместо того, чтобы устанавливать для поля значение "", я устанавливаю его на "" (пробел внутри кавычек), и это решило мою проблему - я нахожу это довольно странным, но исправленное лучше, чем сломанное. :) Если у кого-то есть отзывы / идеи, я очень хочу знать ...

Честно говоря, я не тестировал поля to: и from: на предмет разрешения пробелов, поскольку они обычно имеют значение в моем приложении, поэтому не видел необходимости. Я буду осторожен и просто проверю, что в любом отсутствующем поле есть хотя бы место, пока не будет доказано обратное в будущей версии. Но опять же, кого я обманываю? Я не собираюсь посещать этот код снова, пока что-то еще не сломается ... lol

Я использую "@ sendgrid / mail": "^ 6.4.0"

Решилась ли проблема, я столкнулся с той же ошибкой, но в другом контексте бота.
Он отлично работает в эмуляторе бота, но как только я публикую в лазурном режиме, я получаю эту ошибку.

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

В моем случае эта ошибка возникает из-за того, что я не использовал await до send api, что привело к тому, что ошибка не была обнаружена.

Причина ошибки в том, что to и cc пересекаются。

Удаление повторяющихся писем в to и cc может решить вашу проблему :)

Здесь есть 2 проблемы: неправильные запросы и неправильная обработка отказов от обещаний. Для последнего вам нужно либо использовать результат обещания отправки, чтобы определить, когда отвечать на ваш вызов API, либо использовать async/await . Для первого вам потребуется добавить дополнительную логику отладки, чтобы определить, почему запрос _ плохой_. Я бы начал с регистрации объекта сообщения, который вы пытаетесь передать в вызове send .

Привет @ AWR14!

Эта ошибка возникает, когда вы не обрабатываете отказ от обещания. Вот пример.

Спасибо!

С наилучшими пожеланиями,

Элмер

Теперь новая ссылка на самом деле такая: https://github.com/sendgrid/sendgrid-nodejs/blob/master/docs/use-cases/success-failure-errors.md;)

Но это КРАСИВЫЙ наконечник, потому что теперь можно понять, в чем заключается настоящая ошибка! Спасибо!

@ AWR14 ,
У меня возникла аналогичная проблема, и я исправил ее, убедившись, что поле адреса электронной почты from является действительным адресом электронной почты.

Собственно, вы должны проверить статус электронной почты в админке sendgrid.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги