У меня проблема с почтовым запросом, который внезапно сломался, и я не могу найти проблему. В форме сообщения console.info правильно возвращает UserID, но внутри функции console.info возвращает Undefined.
Форма сообщения:
app.post("/loadTransactions", function(req, res, Data) {
console.info(req.body.UserID)
transactions.loadTransactions(req.body.UserID, function(label) {
Data = label;
res.send({message: Data});
})
})
Функция:
loadTransactions({ UserID }, callback){
console.info({UserID})
var sql = `SELECT * FROM MyTable WHERE UserID = ${UserID}`
var label
database.Query(sql, function(result){
label = result[0];
callback(label)
});
}
Сторона клиента:
window.onload=function(){
const CreateUser = document.querySelector('.Load');
CreateUser.addEventListener('submit', (e) =>{
e.preventDefault()
const UserID = Load.querySelector('.UserID').value
post('http://1.3.3.7/loadTransactions', {UserID})
})
function post (path, data){
console.info(data)
return window.fetch(path,{
method: 'POST',
headers: {
'Accept' : 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify(data)
})
}
}
в качестве дополнительного совета вы, вероятно, захотите исправить эту потенциальную уязвимость инъекций при объявлении var sql
Кажется, это работает, когда я просто делаю req.body вместо req.body.UserID. Есть идеи, почему это происходит? Может быть, потому что отправляется только одна переменная?
оооо, я неправильно прочитал вопрос! Думаю, я знаю, что происходит :) ответ на входящие
В функции вы деструктурируете UserId
из параметра, поэтому вам нужно передать объект, имеющий свойство UserId
, или вы можете не деструктурировать его, а просто получить UserId
.
Давайте посмотрим на более простой рабочий пример:
// similarly to your post form
function first(a) {
console.info(a); // { b: 1 };
second(a);
}
// similarly to your loadTransactions
function second({ b }) {
console.info(b); // 1;
return b + 1;
}
Вот что вы сейчас делаете:
// similarly to your post form
function first(a) {
console.info(a); // { b: 1 };
second(a.b);
}
// similarly to your loadTransactions
function second({ b }) { // this tried to load a.b.b
console.info(b); // undefined;
return b + 1;
}
Как уже упоминалось, еще одно решение - вообще не деструктурировать:
// similarly to your post form
function first(a) {
console.info(a); // { b: 1 };
second(a.b);
}
// similarly to your loadTransactions
function second(b) {
console.info(b); // 1;
return b + 1;
}
У меня такое чувство, что вы могли смотреть не те журналы. Попробуйте назначить
const { UserId } = req.body
в верхней части.post
, зарегистрируйте это, а затем передавайте толькоloadTransactions({ UserId }, function ...)
.