#html #jquery #sql #get
Вопрос:
Я запрашиваю у AWS Athena, используя athena-express. Я использую метод get для возврата определенных данных и вызов AJAX в интерфейсе для запуска запроса, когда пользователь вводит определенное значение с помощью ввода req.body. Когда я делаю этот ввод в postman, я успешно возвращаю данные. Однако, когда я пытаюсь сделать это с помощью вызова AJAX, я просто получаю пустой массив. Я не уверен, правильно ли я ввожу значение req.body.
Это конфигурация athena с запросом внизу.
require('dotenv').config()
const AthenaExpress = require("athena-express"),
aws = require("aws-sdk"),
awsCredentials = {
region: process.env.REGION,
accessKeyId: process.env.ACCESSKEY,
secretAccessKey: process.env.SECRETACCESSKEY
};
aws.config.update(awsCredentials);
//AthenaExpress config object
const athenaExpressConfig = {
aws, /* required */
// s3: process.env.S3BUCKET, /* optional */
db: process.env.ATHENADB, /* optional */
formatJson: true, /* optional default=true */
retry: 200, /* optional default=200 */
getStats: false /* optional default=false */
}
//Initializing AthenaExpress
const athenaExpress = new AthenaExpress(athenaExpressConfig);
module.exports = {
getData: async (req, res) => {
const { building_abbreviation } = req.body
try {
// I know this is a bad way of inputting variables for a query, but this is the only way I can do it using athena-express
let results = await athenaExpress.query(`SELECT * FROM building_meter_metadata WHERE building_abbreviation = '${building_abbreviation}' ORDER BY building_abbreviation`)
console.log(results)
return res.json(results)
} catch (error) {
console.log(error)
}
}
}
Это экспресс — маршрут
const router = require('express').Router()
const athenaController = require('../config/athena')
router.get('/getathena', athenaController.getData)
module.exports = router
Это вызов ajax
$('.search').on('click', function (e) {
e.preventDefault();
console.log($(".building").val()) //This is the value that should be passed to building_abbreviation as req.body
$.ajax({
url: '/getathena',
method: 'GET',
data: {
building_abbreviation: $('.building').val()
}
}).then(response => {
console.log(response);
})
})
This is the HTML, just a simple select dropdown with a few building names to test receiving data.
<div class="input-group mb-3">
<label class="input-group-text" for="inputGroupSelect01">Options</label>
<select name="building_abbreviation" class="form-select building" id="inputGroupSelect01">
<option selected>Choose...</option>
<option>ACB</option>
<option>ADH</option>
<option>AHG</option>
</select>
<button class="btn btn-outline-secondary search" type="button">Search</button>
</div>
И в консоли я возвращаю пустой массив, однако, когда я запускаю запрос в postman, я возвращаю правильные данные. Изображение ниже
ACB //This is the value that should be passed to building_abbreviation as req.body
{
"Items": []
}
Я очень ценю любые советы о том, что я делаю неправильно!
Комментарии:
1. У запросов на ПОЛУЧЕНИЕ нет тела запроса — попробуйте вместо этого ОПУБЛИКОВАТЬ СООБЩЕНИЕ
2. Спасибо, что это были мои проблемы, я даже не думал о ПОСТЕ. Вупс лол