GET запрос на Express.js возвращает все значения из базы данных - PullRequest
0 голосов
/ 24 февраля 2019

Я пытаюсь вернуть данные одного конкретного пользователя, используя метод GET в Express.js, используя Форма .Но при использовании формы она возвращает все значения.

это код index.html:

<form action="http://localhost:1234/users" method="get">
   id <input type="number" name="id" placeholder="enter id" /><br/>
</form>

и код app.js:

    app.get('/users/:id', (request, response) => {
    const id = request.params.id;

    pool.query(`SELECT * FROM users WHERE id = ${id}`, id, (error, result) => {
        if (error) throw error;

        response.send(result);
    });
});

в основном, когда я отправляю запрос через URL http://localhost:1234/users/1, тогда отображаются только данные указанного пользователя.Но когда я использую форму для отправки данных, основной проблемой я увидел URL-адрес, теперь URL-адрес становится таким http://localhost:1234/users?id=1.По этой причине он возвращает все значения из базы данных.Как я могу решить это?Я знаю, может быть, это легко, но как новый для node.js и express, я пробовал несколько методов, но в форме он не работает.

1 Ответ

0 голосов
/ 24 февраля 2019

Наиболее естественным решением было бы использование Ajax для отправки запроса при отправке формы и отключение поведения формы по умолчанию (<event>.preventDefault()).

Я остановлюсь на более хакерском способе, который не 't включает изменение клиента, но только сервера:

  1. Сделать: необязательный параметр id путем добавления знака вопроса
  2. Обработка обоих случаев: если определено req.params.id, но req.query.id нет или если req.query.id определено, но req.params.id нет.

app.get('/users/:id?', (request, response) => {
    const paramId = request.params.id;
    const queryId = request.query.id;
    var id;

    if(paramId && !queryId)
        id = paramId;
    else if(queryId && !paramId)
        id = queryId;

    if(!id)
        return response.send('Please specify an id');

    pool.query(`SELECT * FROM users WHERE id = ${id}`, id, (error, result) => {
        if (error) throw error;

        response.send(result);
    });
});

При этом следующие URL-адреса подходят:

  • http://localhost:1234/users/1
  • http://localhost:1234/users?id=1

Это не:

  • http://localhost:1234/users/
  • http://localhost:1234/users/1?id=1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...