Вот мой экспресс-код приложения
app.get('/books',function(req,res){
var {keyword} =req.query;
connection.query('SELECT * from books', function (error, results, fields) {
if (error) throw error;
for(let result of results){
if(result.title === keyword){
res.send(result);
}
}
});
});
и URL, который я запрашиваю, - http://......../books/keyword=intro. Где intro
пользовательский ввод.
То, чего я пытаюсь достичь здесь, - это вход в HTML, чтобы получить эту информацию и отправить ее в мой API, чтобы он мог запросить мою БД и получить то, что я хочу.
Но я получаю ошибку 404, поэтому я предполагаю, что api настроен неправильно.
Есть ли лучший способ реализовать то, что я делаю?
Является keyword=intro
даже правильный способ запроса моего db.
Мой html выглядит так
<!DOCTYPE html>
</head>
<body>
<div id="data">
<input type="button" id="button" value="Click"/>
<input type="text" id="search" >
</div>
<div id="search">
</div>
<script>
document.getElementById('button').addEventListener('click',getUserInput);
function getUserInput(event){
var userInput = document.getElementById("search").value;
if(userInput !== ""){
httpGetAsync(userInput);
}
}
function httpGetAsync(searchTerm){
var theUrl = 'books?keyword=' + searchTerm;
const xhttp = new XMLHttpRequest();
xhttp.open("GET", theUrl, true); // true for asynchronous
xhttp.send(null);
xhttp.onreadystatechange = processRequest;
function processRequest() {
if (xhttp.readyState == XMLHttpRequest.DONE);
var result = JSON.parse(xhttp.response);
console.log(result);
}}
</script>
</body>
В функции httpGetAsync замените
var theUrl = 'books/keyword=' + searchTerm;
с:
var theUrl = window.location + '/books/keyword=' + searchTerm;
/books/...
к текущему полному URL (который может иметь имя файла в конце).
Этот ответ скорее является комментарием, если это не приемлемо. Заявление, которое я хочу написать, слишком длинное для комментария.
Что касается моего ответа, то это правильный способ написать вашу подготовленную модель заявления? Как я пишу свои модели SQL, это так, и все работает отлично. Получаете ли вы какие-либо ошибки из синтаксиса SQL?
Обратите внимание на скобки после ?
,
selectBooks: function(data, callback) {
let keyword = "%" + req.query + "%";
connection.query("SELECT * FROM books WHERE title LIKE ?", [keyword], callback);
}
http://<server>:<port>/books?keyword=intro
(последний/
измененный на?
). Кроме того, вы можете скрыть IP вашего сервера.if (error) throw error;
внутри асинхронного обратного вызова на вашем сервере. Это никогда не является приемлемой обработкой ошибок для сервера. Напишите код, который на самом деле имеет дело с ошибками - вероятно, что-то вродеconsole.log(err); res.sendStatus(500); return