Неожиданная ошибка при вызове post send code

After completing registration, getting the following error while trying to respond to the POST request. (user is successfully added to database though) express deprecated res.send(status, body): U...

After completing registration, getting the following error while trying to respond to the POST request. (user is successfully added to database though)

express deprecated res.send(status, body): Use res.status(status).send(body) 
instead authregistrator.js:31:29
D:startloopservernode_modulesmysqllibprotocolParser.js:80
        throw err; // Rethrow non-MySQL errors
        ^

RangeError: Invalid status code: [object Object]
    at ServerResponse.writeHead (_http_server.js:199:11)
    at ServerResponse.writeHead (D:startloopservernode_moduleson-headersindex.js:55:19)
    at ServerResponse._implicitHeader (_http_server.js:190:8)
    at write_ (_http_outgoing.js:632:9)
    at ServerResponse.end (_http_outgoing.js:751:5)
    at ServerResponse.send (D:startloopservernode_modulesexpresslibresponse.js:221:10)
    at ServerResponse.json (D:startloopservernode_modulesexpresslibresponse.js:267:15)
    at ServerResponse.send (D:startloopservernode_modulesexpresslibresponse.js:158:21)
    at Query.db.query (D:startloopserverauthregistrator.js:31:29)
    at Query.<anonymous> (D:startloopservernode_modulesmysqllibConnection.js:502:10)

index.js (inpoints)

// Middlewares
const express = require('express')
const morgan = require('morgan')
const cors = require('cors')
const bodyParser = require('body-parser')
const validator = require('express-validator')
const registrator = require('./auth/registrator')
const status = require('./appstatus/status')
require('dotenv').config();

// New express app
const app = express()
app.use(morgan('tiny'))
app.use(cors())
app.use(bodyParser.json())
app.use(validator())

// Status GET
app.get('/status', status.getStatus)

// Register POST
app.post('/auth/reg', registrator.register)

// Express.js listen
const port = process.env.PORT || 3362
app.listen(port, () => {
    console.log(`On port ${port}`)
})

registrator.js

// Registrator
// Requires request and response

const validator = require('./validator')
const bcrypt = require('bcrypt')

exports.register = function(req, res) {
    const valErr = validator.registrationValidator(req)

    if (valErr) {
        console.log(`Validation Error: ${JSON.stringify(valErr)}`)
        res.status(200).send([{well: 'no'} ,valErr])
        throw valErr
    }

    const db = require('../modules/database')
    const username = req.body.username
    const fname = req.body.fname
    const lname = req.body.lname
    const email = req.body.email
    const password = req.body.password

    // Hash Password
    bcrypt.hash(password, 10, (err, hash) => {
        if (err) throw err
        db.query('INSERT INTO users (username, email, password_hash, first_name, last_name) VALUES (?, ?, ?, ?, ?)', [username, email, hash, fname, lname], (err, result) => {
            if (err) {
                res.send(err)
                throw err
            }
            res.status(200).send({well: 'yes'} ,result)
        })
    })

    return 0
}

This seems to be a problem with MySQL. Trying to send valErr works but trying to send response of registration does not. Note: The query is done successfully.

After completing registration, getting the following error while trying to respond to the POST request. (user is successfully added to database though)

express deprecated res.send(status, body): Use res.status(status).send(body) 
instead authregistrator.js:31:29
D:startloopservernode_modulesmysqllibprotocolParser.js:80
        throw err; // Rethrow non-MySQL errors
        ^

RangeError: Invalid status code: [object Object]
    at ServerResponse.writeHead (_http_server.js:199:11)
    at ServerResponse.writeHead (D:startloopservernode_moduleson-headersindex.js:55:19)
    at ServerResponse._implicitHeader (_http_server.js:190:8)
    at write_ (_http_outgoing.js:632:9)
    at ServerResponse.end (_http_outgoing.js:751:5)
    at ServerResponse.send (D:startloopservernode_modulesexpresslibresponse.js:221:10)
    at ServerResponse.json (D:startloopservernode_modulesexpresslibresponse.js:267:15)
    at ServerResponse.send (D:startloopservernode_modulesexpresslibresponse.js:158:21)
    at Query.db.query (D:startloopserverauthregistrator.js:31:29)
    at Query.<anonymous> (D:startloopservernode_modulesmysqllibConnection.js:502:10)

index.js (inpoints)

// Middlewares
const express = require('express')
const morgan = require('morgan')
const cors = require('cors')
const bodyParser = require('body-parser')
const validator = require('express-validator')
const registrator = require('./auth/registrator')
const status = require('./appstatus/status')
require('dotenv').config();

// New express app
const app = express()
app.use(morgan('tiny'))
app.use(cors())
app.use(bodyParser.json())
app.use(validator())

// Status GET
app.get('/status', status.getStatus)

// Register POST
app.post('/auth/reg', registrator.register)

// Express.js listen
const port = process.env.PORT || 3362
app.listen(port, () => {
    console.log(`On port ${port}`)
})

registrator.js

// Registrator
// Requires request and response

const validator = require('./validator')
const bcrypt = require('bcrypt')

exports.register = function(req, res) {
    const valErr = validator.registrationValidator(req)

    if (valErr) {
        console.log(`Validation Error: ${JSON.stringify(valErr)}`)
        res.status(200).send([{well: 'no'} ,valErr])
        throw valErr
    }

    const db = require('../modules/database')
    const username = req.body.username
    const fname = req.body.fname
    const lname = req.body.lname
    const email = req.body.email
    const password = req.body.password

    // Hash Password
    bcrypt.hash(password, 10, (err, hash) => {
        if (err) throw err
        db.query('INSERT INTO users (username, email, password_hash, first_name, last_name) VALUES (?, ?, ?, ?, ?)', [username, email, hash, fname, lname], (err, result) => {
            if (err) {
                res.send(err)
                throw err
            }
            res.status(200).send({well: 'yes'} ,result)
        })
    })

    return 0
}

This seems to be a problem with MySQL. Trying to send valErr works but trying to send response of registration does not. Note: The query is done successfully.

   falselight

08.09.16 — 12:00

Подскажите пожалуйста как избавиться от этой ошибки:

    //

    УРЛ = «ссылка» + СокрЛП(ЭлементыФормы.url.Значение);

    ХМЛХТТП = ПолучитьCOMОбъект(«», «Microsoft.XMLHTTP»);

    ХМЛХТТП.Open(«GET», УРЛ, Ложь);

    ХМЛХТТП.Send(Null);  

    Пока ХМЛХТТП.Status <> 200 Цикл

        Состояние(«Ждем…»);

    КонецЦикла;

    //ТегНачалоРезультата     = «<parents>»;

    //ТегКонецРезультата         = «</parents>»;

    //ТегНачалоРезультата2     = «<id>»;

    //ТегКонецРезультата2     = «</id>»;

    //ТегНачалоПоля     = «<» +     ТегПоляНаСайте + «>»;

    //ТегКонецПоля     = «</» +     ТегПоляНаСайте + «>»;

    ТекстОтвета = ХМЛХТТП.ResponseText;

    //

{Форма.Форма.Форма(7)}: Ошибка при вызове метода контекста (send)

    ХМЛХТТП.Send(Null);  

по причине:

Произошла исключительная ситуация (msxml3.dll): Указанный протокол неизвестен.

   Serginio1

1 — 08.09.16 — 12:04

Аналог null в 1С это неопределено

   Cyberhawk

2 — 08.09.16 — 12:05

(1) Аналог, да не аналог и не везде :)

   Serginio1

3 — 08.09.16 — 12:06

(2) В ВК кстати Null

   falselight

4 — 08.09.16 — 12:13

работает на других функциях с null

я решил проверить обработкой, выдает ошибку

на метод send, что нужно исправить?

   sapphire

5 — 08.09.16 — 12:16

(0)

https://msdn.microsoft.com/ru-ru/library/ms536736.aspx

send method

Sends an HTTP request to the server and receives a response.

Syntax

XMLHttpRequest.send(varBody);

Parameters

varBody [in, optional]

Type: any

Any that specifies the body of the message being sent with the request.

Value    Meaning

ArrayBuffer

A binary data. See FileReader.readAsArrayBuffer.

blob

A Blob (binary data object).

Document

A documentnode.

ArrayBufferView

A typed array view of an ArrayBuffer.

string

A DOMString.

FormData

A FormData object

Как видим, NULL там нет :)

   falselight

6 — 08.09.16 — 12:17

(1) если ставить неопределено за место null таже ошибка

   sapphire

7 — 08.09.16 — 12:17

+(5) Но, поскольку varBody optional, то,

ХМЛХТТП.Send();

   falselight

8 — 08.09.16 — 12:17

(0) а что там должно быть?

   sapphire

9 — 08.09.16 — 12:18

(6) Не ставьте вообще ничего

   falselight

10 — 08.09.16 — 12:18

(9) попробую

   falselight

11 — 08.09.16 — 12:21

(9) ругается

{Форма.Форма.Форма(8)}: Ошибка при вызове метода контекста (send)

    ХМЛХТТП.Send();  

по причине:

Произошла исключительная ситуация (msxml3.dll): Указанный протокол неизвестен.

   falselight

12 — 08.09.16 — 12:21

что то не так!!!

   Serginio1

13 — 08.09.16 — 12:22

(12) Пустую строку

   sapphire

14 — 08.09.16 — 12:22

(11) Так это не потому.

Вы в УРЛ пихаете что?

УРЛ = «ссылка» + СокрЛП(ЭлементыФормы.url.Значение);

   Serginio1

15 — 08.09.16 — 12:22

   sapphire

16 — 08.09.16 — 12:23

+(14) Любой браузер ругнется на такой урл

   falselight

17 — 08.09.16 — 12:27

(16) то что я ложу в УРЛ пробовал в браузере он возвращает номер, то есть работает

   falselight

18 — 08.09.16 — 12:32

брал с отладчика с табло, вставлял в строку браузера

   sapphire

19 — 08.09.16 — 12:34

(17) НЕ ВЕРЮ (с)

   sapphire

20 — 08.09.16 — 12:35

(18) значение УРЛ в студию.

   Serginio1

21 — 08.09.16 — 12:35

(18) А там по аналогии с 1С

xhr.open(‘POST’, ‘/server’, true);

а в Send ресурсы

   falselight

22 — 08.09.16 — 12:37

   Serginio1

23 — 08.09.16 — 12:38

   Serginio1

24 — 08.09.16 — 12:39

А попробуй

ХМЛХТТП.Open(«GET», «http://www.reestr35.ru/admin/offline_func.php»;, Ложь);

    ХМЛХТТП.Send(«?act=add_redirect&url=http://ya.ru»;);

   sapphire

25 — 08.09.16 — 12:43

(22)

УРЛ = «http://www.reestr35.ru/admin/offline_func.php?act=add_redirect&url=http://ya.ru»;;

ХМЛХТТП = ПолучитьCOMОбъект(«», «Microsoft.XMLHTTP»);

ХМЛХТТП.Open(«GET», УРЛ, Ложь);

ХМЛХТТП.Send(Null);  

Пока ХМЛХТТП.Status <> 200 Цикл

     Состояние(«Ждем…»);

КонецЦикла;

ТекстОтвета = ХМЛХТТП.ResponseText;

У меня работает.

   falselight

26 — 08.09.16 — 12:46

(25) почему у меня может быть ошибка?

   falselight

27 — 08.09.16 — 12:54

(26) не подскажете? если все одинаково, то дело в сервере?

   Serginio1

28 — 08.09.16 — 12:57

   falselight

29 — 08.09.16 — 12:58

(28) попробовал на своем компе, тоже самое, ошибка

   Serginio1

30 — 08.09.16 — 12:59

   falselight

31 — 08.09.16 — 12:59

(28) все же не понимаю как мне устранить эту ошибку? (

   falselight

32 — 08.09.16 — 13:00

(30) (24) в смысле?

   falselight

33 — 08.09.16 — 13:01

(30) но вы говорите же что у вас выполняется все

   Serginio1

34 — 08.09.16 — 13:07

врап=новый COMОбъект(«NetObjectToIDispatch45»);

    HttpClient=Врап.ПолучитьТипИзСборки(«System.Net.Http.HttpClient»,»System.Net.Http.dll»);

  
  
  handler = врап.СоздатьОбъект(«System.Net.Http.HttpClientHandler»);

  DecompressionMethods= Врап.ПолучитьТип(«System.Net.DecompressionMethods»);

  handler.AutomaticDecompression=Врап.OR(DecompressionMethods.GZip,DecompressionMethods.Deflate) ;

  
  Клиент=Врап.СоздатьОбъект(HttpClient,handler);

  УРЛ = «http://www.reestr35.ru/admin/offline_func.php?act=add_redirect&url=http://ya.ru»;;

  Стр=Клиент.GetStringAsync(УРЛ).Result;

  Сообщить(Стр);

//Клиент.Dispose();

  Врап.ЗакрытьРесурс(Клиент);

Выдает

Your IP (хх.ххх.х.ххх) is not allowed.

   falselight

35 — 08.09.16 — 13:09

(34) да если пробовать как в 24, тоже

   Serginio1

36 — 08.09.16 — 13:12

(33) Это не я а 25

   Serginio1

37 — 08.09.16 — 13:13

(32) Попробуй 15+30

   falselight

38 — 08.09.16 — 14:14

(36) узнал что такое бывает на сервере иногда

то есть в иной период возможно сработает, как в (0)

   Serginio1

39 — 08.09.16 — 14:22

(38) Побробуй 37 для успокоения души

   Serginio1

40 — 08.09.16 — 14:23

38 при этом из браузера читает?

   falselight

41 — 08.09.16 — 14:30

(39) пока меня выкинуло с сервера и не пускает (((( ожидаю когда наладится если

(24) вот это сработало у меня на компе, выдав результат Your IP (хх.ххх.х.ххх) is not allowed, так как там можно только с сервера, я хотел проверить это на сервере и меня выбросило

то есть при (24) ошибки той нет, и по коду идет дальше

(40) (0) + ссылка из (22) в браузере возвращает число на пустой странице, которое мне и нужно считать

   Serginio1

42 — 08.09.16 — 14:39

(41) Значит у тебя проблема с библиотеками на сервере. Небось 64 разрядны. А почему HTTPСоединеие не используешь?

Почему 37 не хочешь попробовать?

   eklmn

43 — 08.09.16 — 14:57

прокси все ломает…

   sapphire

44 — 08.09.16 — 14:59

(42) Нет не с библиотеками.

   Serginio1

45 — 08.09.16 — 15:01

(44) Возможно. Я таким анахронизмом давно не занимаюсь.

   sapphire

46 — 08.09.16 — 15:02

(41) У меня тоже именно это (Your IP (хх.ххх.х.ххх) is not allowed) и выдало.

О чем это говорит, что разрешен вход либо под определенным агентом с определенной подсети, иначе браузер не выдавал бы

числа  <<ссылка из (22) в браузере возвращает число на пустой странице, которое мне и нужно считать>>.

   falselight

47 — 08.09.16 — 15:53

(42) на сервере 64х разрядная система

(46) да работать это будет только на сервере

   falselight

48 — 08.09.16 — 15:54

(42) (37) там много написано, изучать неделю только нужно, мне дали пример кода и что делать объяснили, но вот из за ошибки на send ничего не работает

   sapphire

49 — 08.09.16 — 15:54

(47) неа, иначе как ты видишь ссылка из (22) в браузере возвращает число на пустой странице, которое мне и нужно считать.

   falselight

50 — 08.09.16 — 15:55

(49) я вижу это в браузере на сервере, там только работает

   falselight

51 — 08.09.16 — 15:57

но вот из 1с ломается на методе send, пока ни разу не сработало

то что в (24) возвратило <?xml version=»1.0″ encoding=»UTF-8″?> то есть это не подойдет наверное, так как это не то что нужно

   falselight

52 — 08.09.16 — 16:00

{Форма.Форма.Форма(7)}: Ошибка при вызове метода контекста (send)

    ХМЛХТТП.Send(Null);  

по причине:

Произошла исключительная ситуация (msxml3.dll): Указанный протокол неизвестен.

||

остается

   Serginio1

53 — 08.09.16 — 16:18

   Serginio1

54 — 08.09.16 — 16:20

Рядом с NetObjetToIDispatch45.dll лежит RegAsm.bat

его нужно запустить от администратора. Там делов меньше минуты

   falselight

55 — 08.09.16 — 16:56

(54) ну я не администратор на сервере, мне сказали что метод сенд иногда не работает, иногда работает, я не пойму этого всего пока

  

falselight

56 — 08.09.16 — 16:57

(54) я не в теме этого всего, с этим всем нужно разбираться

Если при получении данных с сайта возникает ошибка:

Ошибка при вызове метода контекста (Send): Произошла исключительная ситуация (WinHttp.WinHttpRequest): The certificate authority is invalid or incorrect

Это может означать, что соединение защищенное и 1С не может установить подлинность сертификата.

Чтобы обойти эту ситуацию можно включить игнорирование ошибок защищенного соединения. Ниже в листенге это «блок по отключению защищенного соединения»


WinHttp = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
WinHttp.SetProxy(2, ПроксиСервер.Адрес+":"+ПроксиСервер.Порт); // устанавливаем параметры проксисервера если нужно
WinHttp.SetCredentials(ПроксиСервер.Логин, ПроксиСервер.Пароль, 1); // логин и пароль проксисервера
// ************************** Начало блока по отключению защищенного соединения **********
Скрипт= Новый COMОбъект("MSScriptControl.ScriptControl");
Скрипт.language="javascript";
Скрипт.AddObject("WinHttp",WinHttp);
Скрипт.Eval("WinHttp.Option(2)=1251"); // установка кодировки страницы
Скрипт.Eval("WinHttp.Option(4)=13056");//intSslErrorIgnoreFlags Игноировать ошбибки при SSL соединении
Скрипт.Eval("WinHttp.Option(6)=true");//blnEnableRedirects Разрешить перенаправления
Скрипт.Eval("WinHttp.Option(12)=true");//blnEnableHttpsToHttpRedirects Разрешить перенаправления с защищенного на не защиещенное соединение
// ************************** Конец блока по отключению защищенного соединения **********
WinHttp.Open("POST",URLСайта, Ложь); // URLСайта нужно заменить на тот к которому подсоединяетесь
WinHttp.SetRequestHeader("Host", URLСайта);	// URLСайта нужно заменить на тот к которому подсоединяетесь
WinHttp.SetRequestHeader("User-Agent","Mozilla/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.0.5) Gecko/2008120122 Firefox/3.0.5");
WinHttp.SetRequestHeader("Accept","text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
WinHttp.SetRequestHeader("Accept-Language","ru,en-us;q=0.7,en;q=0.3");
WinHttp.SetRequestHeader("Accept-Charset","windows-1251,utf-8;q=0.7,*;q=0.7");
WinHttp.SetRequestHeader("Keep-Alive","300");
WinHttp.SetRequestHeader("Connection","keep-alive");
WinHttp.SetRequestHeader("Content-Type","application/x-www-form-urlencoded");
WinHttp.Send(ДанныеPOSTЗапроса)

Ключевыми, здесь являются параметры 4 и 12

Также встречал следующий код, но он НЕ рабочий, хотя и не вызывает ошибок


WinHttp.Option(2, 1251);
WinHttp.Option(4, 13056);//intSslErrorIgnoreFlags
WinHttp.Option(6, true);//blnEnableRedirects
WinHttp.Option(12, true);//blnEnableHttpsToHttpRedirects

Резюме проблемы

Получение ошибки «неверный запрос» со следующей полезной нагрузкой.

Запрос

cosnt msg = {
        "to": "[email protected]",
        "from": "[email protected]",
        "subject": "Support Pay Transparency at PayCheck",
        "templateId": "24ae3147-4faa-4380-8613-c5be144f4542",
        "customArgs": {
            "ally_id": "cj6zlh7yd000001qir4r5suuk"
        }
};
sgMail.send(msg)

отклик

{
        "message": "Bad Request",
        "code": 400,
        "response": {
            "headers": {
                "server": "nginx",
                "date": "Wed, 30 Aug 2017 22:30:41 GMT",
                "content-type": "application/json",
                "content-length": "365",
                "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": [
                    {
                        "message": "Unless a valid template_id is provided, the content parameter is required. There must be at least one defined content block. We typically suggest both text/plain and text/html blocks are included, but only one block is required.",
                        "field": "content",
                        "help": "http://sendgrid.com/docs/API_Reference/Web_API_v3/Mail/errors.html#message.content"
                    }
                ]
            }
        }
    }

Заметки

В документации написано templateId но в сообщении об ошибке написано template_id . Я пробовал оба и получил такое же сообщение об ошибке. Я прикрепил снимок экрана с моим шаблоном для проверки работоспособности, чтобы убедиться, что он правильно настроен в sendgrid.

Технические подробности:

  • sendgrid-nodejs Версия: master (последняя фиксация: [номер фиксации])
  • Node.js Версия: 6.10.3
  • Запуск в функции AWS Lambda

screen shot 2017-08-30 at 6 43 57 pm

Все 23 Комментарий

@onesien API почтовой программы JS нового узла не зависит от регистра, поэтому вы можете использовать как templateId и template_id . Случай верблюда более распространен в области JS, поэтому мы добавили его поддержку, в то время как сам API использует случай змеи.

Я посмотрю, что происходит с идентификатором шаблона

Привет @onesien!

Вы также можете обратиться в службу поддержки . Я думаю, проблема может быть связана со старым редактором шаблонов.

Можете ли вы также попробовать создать новый шаблон и использовать этот идентификатор?

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

Элмер

@thinkingserious ты можешь проверить это на своем конце? Похоже, что мы правильно отправляем параметр template_id с запросом. Я только что создал новый шаблон, и у меня тоже возникает эта проблема.

@adamreisnz ,

Мои локальные тесты работают, но у меня в аккаунте только новые шаблоны.

Нет, я использовал новый шаблон, только что созданный, возникла та же проблема

Следующее работает для меня (с использованием версии v6.1.1), следуя приведенному здесь примеру:

// Setup sendgrid api
const sendGridMail = require('@sendGrid/mail');
sendGridMail.setApiKey(process.env.SENDGRID_API_KEY);
sendGridMail.setSubstitutionWrappers('-', '-');

//build object 
var mailOptions = {
    personalizations:[{
      to: '[email protected]',
      substitutions: {'name':'John', 'city':'Denver'}
    }],
    from: '[email protected]',
    reply_to: '[email protected]',
    subject: 'Hello',
    html: 'email text goes here',
    templateId: '13b8f94f-bcae-4ec6-b752-70d6cb59f932'
  };

//send 
sendGridMail.send(mailOptions);

Ах, я думаю, что у нас есть старая ошибка, когда API требует блокировать контент во всех случаях. Итак, это работает:

// Setup sendgrid api
const sendGridMail = require('@sendGrid/mail');
sendGridMail.setApiKey(process.env.SENDGRID_API_KEY);
sendGridMail.setSubstitutionWrappers('-', '-');

//build object 
var mailOptions = {
    to: '[email protected]',
    from: '[email protected]',
    reply_to: '[email protected]',
    subject: 'Hello',
    templateId: '13b8f94f-bcae-4ec6-b752-70d6cb59f932',
    html: ' ',
    substitutions: {
      name: 'Some One',
      city: 'Denver',
    }
  };

//send 
sendGridMail.send(mailOptions);

но не это:

// Setup sendgrid api
const sendGridMail = require('@sendGrid/mail');
sendGridMail.setApiKey(process.env.SENDGRID_API_KEY);
sendGridMail.setSubstitutionWrappers('-', '-');

//build object 
var mailOptions = {
    to: '[email protected]',
    from: '[email protected]',
    reply_to: '[email protected]',
    subject: 'Hello',
    templateId: '13b8f94f-bcae-4ec6-b752-70d6cb59f932',
    substitutions: {
      name: 'Some One',
      city: 'Denver',
    }
  };

//send 
sendGridMail.send(mailOptions);

Мне пришлось добавить блок содержимого, чтобы отправить шаблон. Я получал _Bad Request (400) «Если не указан действительный template_id, параметр содержимого обязателен. Должен быть хотя бы один определенный блок содержимого …» _ при использовании шаблона, созданного в новом редакторе html.

sgMail.setApiKey(sgKey);
sgMail.setSubstitutionWrappers('-', '-');
var msg: any = {
  to: email,
  from: '[email protected]',
  templateId: 'xxxxxxx',
  substitutions: {
     verifyUrl: createAccountLink
  }
};
sgMail.send(msg)

Если я добавлю блок содержимого, электронное письмо с шаблоном будет отправлено в редакторе html в формате.

sgMail.setApiKey(sgKey);
sgMail.setSubstitutionWrappers('-', '-');
var msg: any = {
  to: email,
  from: '[email protected]',
  content: [{"type":"text/html","value":"0"}],
  templateId: 'xxxxxx',
  substitutions: {
     verifyUrl: createAccountLink
  }
};
sgMail.send(msg)

Хорошо, я оставляю это открытым как ошибку.

Я предполагаю, что этот SDK добавляет пустой объект содержимого, если он не установлен. Я думаю, нам нужно пропустить эти функции, когда html и txt не установлены.

На данный момент вышеуказанный обходной путь сделает то, что вам нужно.

@thinkingserious Думаю, ты прав. Я прочитал документацию по API и подумал, что это поле является обязательным. В нем есть только хорошо скрытый комментарий (который великолепно оформлен!), Который я пропустил:

image

Я создам PR для решения этой проблемы!

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

Спасибо за помощь пищит. Я буквально терял рассудок. Вчера поздно вечером я наконец придумал обходной путь и приходил сюда, чтобы сообщить больше информации, но похоже, что вы все уже используете это :-)

Извините за @onesien ,

Исправление только что было отправлено в npm (v6.1.2).

Я использовал дословный код из ответа @thinkingserious, и у возникают проблемы.

Я просто пытаюсь получить самые простые замены в шаблоне, который я создал в sengrid, для отправки. Ответ в CloudWatch (поскольку он работает в Lambda) отображается как 202, но я получаю электронное письмо: A message was received from this address by our systems that had errors in the smtpapi header, and cannot be processed. The error detected was: The template id must be a valid template id for your account.

Что я здесь делаю не так, ребята? Я пытаюсь просеять документы sendgrid, но все кажется действительно разрозненным.

Как вы отправляете идентификатор шаблона? Это через переменную окружения при вызове лямбды?

спасибо за быстрый ответ @cbilliau — нет, в моем случае строка шаблона жестко запрограммирована, так как я просто пытаюсь получить функциональную основу между интерфейсом и сервером. Мой дословный пример:

const sgMail = require("@sendgrid/mail");
sgMail.setApiKey(
  "XXXXX"
);
sgMail.setSubstitutionWrappers("%", "%"); // Configure the substitution tag wrappers globally
  const msg = {
    to: formFields.toEmail,
    from: formFields.fromEmail,
    subject: "Hello world",
    text: "test",
    html: "<p>test</p>",
    templateId: "be2cc0da-5b2c-428f-8e45-c140f6cfb6eb",
    substitutions: {
      name1: formFields.fromName,
      name2: formFields.fromName,
      date: formFields.date
    }
  };

  sgMail.send(msg);

@tetreault Ознакомьтесь с моим ответом выше, я добавляю content: [{"type":"text/html","value":"0"}], в свою функцию, и это сработало. Неизвестно почему.

просто попробовал, к сожалению, не изменил конечный результат @cbilliau :(. Получил то же письмо:

A message was received from this address by our systems that had errors in the smtpapi header, and cannot be processed. 
The error detected was: The template id must be a valid template id for your account. You provided be2cc0da-5b2c-428f-8e45-c140f6cfb6eb 

вау, позволь мне поклониться на секунду @cbilliau 🤣 я просто торопился с вещами и не обращал больше внимания. Я понял, что получаю уникальный идентификатор для шаблона, который я создал в разделе «маркетинг», а не в «шаблонах транзакций». Я не очень часто использую интерфейс sendgrid и просто напортачил с этим lol

Ладонь полностью закрываю лицо, фиксирую на моем конце и надеюсь, что это сработает.

кк — подтверждение его работа в настоящее время, особенно с помощью content: [{ type: "text/html", value: "0" }] линии, @cbilliau упомянутого 👍

Была ли эта страница полезной?

0 / 5 — 0 рейтинги

Понравилась статья? Поделить с друзьями:
  • Неожиданная ошибка оценка была отменена power query
  • Неожиданная ошибка не удалось оценить газ для подтверждения
  • Неодинаковый индекс для категории видов работ как исправить
  • Необычный подарок лексическая ошибка
  • Необъявленный идентификатор как исправить