MySQL XDevAPI Как вернуть успешный статус - PullRequest
0 голосов
/ 11 июля 2020

Разработка моего RestAPI с использованием XDEVAPI, говорящего с MySQL. Этот фрагмент кода работает для добавления новой записи,

myRecord.add = (newmyRecord, res) =>
{
    mysql.getSession(mydb)      // .getSession() is a Promise, returns a session
        .then
        (
            sess =>
            {
                sess.getSchema("myschema").getTable("mytable").insert(...).execute(row=>{console.log('inserted')}); 
                
                res.send(200);   // resulting "UnhandledPromiseRejectionWarning: TypeError: res.send is not a function"
                //return 200;    // Postman still shows "Sending" and Fiddler does not show status 200
            }
            
        );
}

Итак, мой вопрос в том, как отправить обратно успешные 200 для завершения POST?

1 Ответ

1 голос
/ 13 июля 2020

Метод execute() также возвращает Promise и, в случае insert(), он не ожидает какого-либо обратного вызова, поэтому следующая строка никогда не будет вызвана:

console.log('inserted')

Единственные случаи, когда execute() ожидает обратных вызовов, - это TableSelect и CollectionFind. И мы постепенно уходим от этого вкуса API, поскольку теперь вы также можете обрабатывать наборы результатов, вызывая fetchOne() или fetchAll() в экземпляре Result, в который этот Promise разрешается (см. DocResult и RowResult).

В любом случае, ничто не препятствует выполнению вызова res.send(200), и ничто неявно изменяет API базовой инфраструктуры HTTP (которая, как вам кажется, для использования). Итак, упомянутая вами проблема, похоже, никоим образом не связана с коннектором MySQL X DevAPI.

TypeError: res.send is not a function

Вероятно, вы переопределяете этот объект res перед его вызовом (и перед вызовом add()).

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

Отказ от ответственности: я ведущий разработчик * Разъем 1040 * X DevAPI для Node.js

...