MySQL XDevAPI Как вернуть успешный статус
Разработка моего 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 ответ
В 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()
).
Наверное, это не сильно поможет, но это единственное, что я могу извлечь прямо сейчас из вашего сообщения.
Отказ от ответственности: я являюсь ведущим разработчиком MySQL X DevAPI Connector для Node.js