Я пытался настроить API отдыха в течение нескольких дней.Я следовал замечательному учебнику, который действительно помог мне понять большую часть того, как они работают (отправка запросов, получение ответов и т. Д.).Однако он использует MongoDB и Mongoose.Я использую MySQL.Мои таблицы и представления немного сложны, поэтому я решил вместо использования ORM просто использовать пакет mysql2 и выполнять запросы самостоятельно.Я застрял с попытками PATCH
и PUT
в данный момент.Часть моего внешнего интерфейса иногда отправляет только 1 или 2 поля, которые необходимо обновить (PATCH
из всего, что я собрал).Поэтому я использовал часть учебника MongoDB и Mongoose, чтобы построить массив объектов и передать их в connection.query
.Вот мой маршрут исправления:
router.patch('/:txnid', (req, res, next) => { //UPDATE fields that are passed
const txnid = req.params.txnid;
for (const field of req.body) {
fieldsToUpdate[field.name] = field.value;
}
connection.query("UPDATE QuoteToClose SET ? WHERE qb_TxnID = '" + txnid + "'", { fieldsToUpdate }, function (error, results) {
if (error) {
res.status(404).json({
message: error,
field: fieldsToUpdate
});
} else {
res.status(201).json({
"record_count" : results.length,
"error": null,
"response": results
});
}
});
});
Иногда я пропускаю 1 поле, иногда пропускаю 2. В этом случае я пропускаю только 1. Я строю свое тело в POSTMAN и отправляю это с запросом PATCH:
[
{
"name": "margin",
"value": "50"
}
]
Когда я запускаю это через POSTMAN, я получаю ошибку:
{
"message": {
"code": "ER_BAD_FIELD_ERROR",
"errno": 1054,
"sqlState": "42S22",
"sqlMessage": "Unknown column 'fieldsToUpdate' in 'field list'"
},
"field": {
"margin": "50"
}
}
Хотя я не уверен, почему.К сожалению, я не использую Mongoose, поэтому не знаю, зависит ли что-то от этого, что я пропускаю.Мой анализатор тела настроен так:
app.use(bodyParser.urlencoded({extended: false}));
app.use(bodyParser.json());
Я хочу динамически построить этот запрос, а не указывать каждое поле (этот способ выглядит чище.