Невозможно получить запрошенный API в express.js

0

Вот мой экспресс-код приложения

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> 

  • 0
    Ваш синтаксис URL неверен - попробуйте http://<server>:<port>/books?keyword=intro (последний / измененный на ? ). Кроме того, вы можете скрыть IP вашего сервера.
  • 0
    К вашему сведению, вы НИКОГДА не должны иметь if (error) throw error; внутри асинхронного обратного вызова на вашем сервере. Это никогда не является приемлемой обработкой ошибок для сервера. Напишите код, который на самом деле имеет дело с ошибками - вероятно, что-то вроде console.log(err); res.sendStatus(500); return
Показать ещё 5 комментариев
Теги:
express
http
get

2 ответа

1

В функции httpGetAsync замените

var theUrl = 'books/keyword=' + searchTerm;

с:

var theUrl = window.location + '/books/keyword=' + searchTerm;
  • 0
    Все еще получаю 404, но лучше так, спасибо
  • 0
    Это на самом деле неправильно, потому что он добавляет /books/... к текущему полному URL (который может иметь имя файла в конце).
0

Этот ответ скорее является комментарием, если это не приемлемо. Заявление, которое я хочу написать, слишком длинное для комментария.

Что касается моего ответа, то это правильный способ написать вашу подготовленную модель заявления? Как я пишу свои модели SQL, это так, и все работает отлично. Получаете ли вы какие-либо ошибки из синтаксиса SQL?

Обратите внимание на скобки после ? ,

    selectBooks: function(data, callback) {
        let keyword = "%" + req.query + "%";
        connection.query("SELECT * FROM books WHERE title LIKE ?", [keyword], callback);
    }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню