Как передать несколько параметров GET в Express?

Я немного новичок в Node.js и пишу некоторые REST API в Node.js. Для одного из моих API мне нужно передать 2 параметра, чтобы получить данные из базы данных. Я добился этого с помощью одного параметра, но не более 2. Кто-нибудь может мне помочь, пожалуйста?

Вот мой код

app.get('/getData/:receiver_id&:sender_id',function(req,res){
    connection.query('SELECT * FROM mytable WHERE sender_id=? AND receiver_id=?',[req.params.sender_id],[req.params.receiver_id],function(error,results,fields){
        if (error) throw error;
        else {
        res.json({'result':results})
        console.info(JSON.stringify(results))
        }
    });
});

И я все время получаю эту ошибку в консоли

> /var/www/html/chatApp/node_modules/mysql/lib/protocol/Parser.js:80
        throw err; // Rethrow non-MySQL errors
              ^
TypeError: Object 1 has no method 'apply'
    at Query.Sequence.end (/var/www/html/chatApp/node_modules/mysql/lib/protocol/sequences/Sequence.js:83:24)
    at Query.ErrorPacket (/var/www/html/chatApp/node_modules/mysql/lib/protocol/sequences/Query.js:90:8)
    at Protocol._parsePacket (/var/www/html/chatApp/node_modules/mysql/lib/protocol/Protocol.js:278:23)
    at Parser.write (/var/www/html/chatApp/node_modules/mysql/lib/protocol/Parser.js:76:12)
    at Protocol.write (/var/www/html/chatApp/node_modules/mysql/lib/protocol/Protocol.js:38:16)
    at Socket.<anonymous> (/var/www/html/chatApp/node_modules/mysql/lib/Connection.js:91:28)
    at Socket.<anonymous> (/var/www/html/chatApp/node_modules/mysql/lib/Connection.js:502:10)
    at Socket.EventEmitter.emit (events.js:95:17)
    at Socket.<anonymous> (_stream_readable.js:710:14)
    at Socket.EventEmitter.emit (events.js:92:17)

Вы добавили точно такое же сообщение; пожалуйста, удалите его - и убедитесь, что код обновлен, а сервер перезапущен.

raina77ow 28.08.2018 11:56

он по-прежнему показывает ту же ошибку

Neha 28.08.2018 12:02

Тогда покажите, как вы переписали код.

raina77ow 28.08.2018 12:04

ваш отредактированный код неверен, вам нужно связать параметры в один массив, а не в два разных массива. Должен быть [req.params.sender_id,req.params.receiver_id] instead of [req.params.sender_id],[req.params.receiver_id]

Prashant Gupta 28.08.2018 12:16

Почему вы все еще используете два массива для передачи параметров в MySQL в коде отредактировал? Что же тогда редактировать?

raina77ow 28.08.2018 12:16
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
5
5 470
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Шаблон определения маршрута в вашем коде в порядке (проверьте эта ветка для альтернатив), проблема в другом: вы должны использовать один массив для передачи всех значений для запроса (документы), а не отдельный массив для каждого параметра. Например:

connection.query(
   'SELECT * FROM mytable WHERE sender_id=? AND receiver_id=?',
   [req.params.sender_id, req.params.receiver_id],
   function(/*...*/)
);

Обратите внимание, что сообщение об ошибке здесь действительно полезно: Object 1 has no method apply означает, что пакет MySQL пытается рассматривать ваш параметр как функцию (обратный вызов).

как решить эту ошибку? потому что показывает /var/www/html/chatApp/node_modules/mysql/lib/protocol/Parser‌​.js:80 throw err; // Rethrow non-MySQL errors

Neha 28.08.2018 11:42

Вы изменили код описанным способом? Если да, то в чем именно заключается сообщение?

raina77ow 28.08.2018 11:46

да, я изменил код, но когда я вызываю его из приложения, он по-прежнему показывает ту же ошибку на консоли

Neha 28.08.2018 11:47

Хорошо, в чем ошибка, сообщение? Вы показали только первую строчку.

raina77ow 28.08.2018 11:49

Если я попробую этот код, URL-адрес станет 104.131.162.126:3000/getData?receiver_id=1&sender_id=2, и он покажет тот же журнал в консоли. Что мне делать, чтобы решить эту ошибку?

Neha 28.08.2018 13:15

Попробуйте таким образом Сформируйте URL-адрес в этом от localhost:portno/getData/:receiver_id/:sender_idEx: localhost:portno/getdata/12/21

app.get('/getData/:receiver_id/:sender_id',function(req,res){
    connection.query('SELECT * FROM mytable WHERE sender_id=? AND receiver_id=?',[req.params.sender_id, req.params.receiver_id],function(error,results,fields){
        if (error) throw error;
        else {
        res.json({'result':results})
        console.info(JSON.stringify(results))
        }
    });
});

Другой путь

'Ex: localhost:portno/getdata/12&21`
 app.get('/getData/:receiver_id&:sender_id',function(req,res){
        connection.query('SELECT * FROM mytable WHERE sender_id=? AND receiver_id=?',[req.params.sender_id, req.params.receiver_id],function(error,results,fields){
            if (error) throw error;
            else {
            res.json({'result':results})
            console.info(JSON.stringify(results))
            }
        });
    });

Еще один способ сделать это

app.get('/getData/:receiver_id&:sender_id',function(req,res){
        connection.query('SELECT * FROM mytable WHERE sender_id=? AND receiver_id=?',req.params.sender_id, req.params.receiver_id,function(error,results,fields){
            if (error) throw error;
            else {
            res.json({'result':results})
            console.info(JSON.stringify(results))
            }
        });
    });

ну, я тоже пробовал, но все равно показывает ту же ошибку

Neha 28.08.2018 12:14

Ваш ответ вводит в заблуждение; нет ничего плохого в том, чтобы записать путь так, как это сделал OP, проблема в коде привязки.

raina77ow 28.08.2018 12:17

Просто скопируйте и вставьте мой код в свой проект и сформируйте правильный URL-адрес, затем протестируйте API @ Neha

Prashant Gupta 28.08.2018 12:18

@PrashantGupta пробовала оба способа, но все та же ошибка

Neha 28.08.2018 12:32

Я добавил еще один способ сделать это, попробуйте @Neha

Prashant Gupta 28.08.2018 12:47
app.get('/getData/:receiver_id/:sender_id',function(req,res){
    connection.query('SELECT * FROM mytable WHERE sender_id=? AND receiver_id=?',[req.params.sender_id, req.params.receiver_id],function(error,results,fields){
        if (error) throw error;
        else {
            res.json({'result':results})
            console.info(JSON.stringify(results))
        }
    });
});

дайте мне тестовый URL-адрес для передачи параметров

Vaghani Janak 29.08.2018 06:50

104.131.162.126:3000/getData/1/2

Neha 29.08.2018 09:32

Другие вопросы по теме