Работа с AJAX-запросом
Имеются следующие файлы: router.js
router.post('/database/sqlBilder', jsonParser, function (request, response) {
if (!request.body) return response.sendStatus(400);
sqlBilder(request.body.code, request.body.table, [request.body.login, request.body.password]);
});
handler.js
let user = JSON.stringify({ 'code': code,
'table': table,
'login': args[0].value,
'password': args[1].value });
let response = await fetch('./database/sqlBilder', {
method: 'POST',
body: user,
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json'
}
})
if (response.ok) {
let text = response.json();
console.log(text);
alert("Запрос выполнен: " + response.status);
} else {
alert("Ошибка HTTP: " + response.status);
}
sqlBilder.js
query = `SELECT * FROM ${table} WHERE`;
// ...
query += ` id = '${args[0]}';`;
pool.execute(query, (err, results)=>{
if (err) {
throw err;
}
else{
console.log('Из базы получена запись');
console.log(results[0].id);
}
return JSON.stringify({ 'id': results[0].id});
});
Суть в следующем: к на html страние происходит вызов AJAX-запроса, в него передаются данные, запрос поступает на обработчик, где парсится и его данные уходят в импортированную функицю, там выполняется sql-запрос к базе, который успешно сигнализирует мне о том, что получен верный id. До этого момента все работает. На сколько я понимаю, я должен не просто выполнить sql-запрос, но и вернуть его результат и разумеется данные не возвращаются и на html странице или к консоле браузера вижу Ошибка HTTP: 500.
Хотелось бы узнать как нужно возвращать и принимать результат этого запроса?
Ответы (1 шт):
Это не является до конца решением моей проблемы, но все полезнее комментариев, не объясняющих как исправить проблему.
Во первых, код в файле handler требуется изменить следующим образом:
if (response.ok) {
const text = await response.json();
console.log('Успех:', JSON.stringify(text));
alert("Запрос выполнен: " + response.status);
} else {
alert("Ошибка HTTP: " + response.status);
};
Во вторых, в файле router внутри обработчика post дописал возврат значения в ответе:
if (!request.body) return response.sendStatus(400);
console.log(request.body);
let result = sqlBilder(request.body.code, request.body.table, [request.body.login, request.body.password]);
console.log(result);
response.json(JSON.stringify({ result: result }));
На текущий момент я могу успешно получить результат на ajax запросе, только если сразу пропишу вместо последней строки следующие:
response.json(JSON.stringify({ 'id': 1 }));
К сожалению пока, что не удалось получить аналогичный ответ с sqlBilder, хотя я на router объявлял ассинхронную функцию, экспериментировал с ассинхронной функцией на самом sqlBilder ...