Работа с 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 ...

→ Ссылка