Как передать несколько параметров GET в Express? - PullRequest
0 голосов
/ 28 августа 2018

Я немного новичок в 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.log(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)

Ответы [ 3 ]

0 голосов
/ 28 августа 2018

Попробуй таким образом Сформируйте URL в этом файле localhost:portno/getData/:receiver_id/:sender_id 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.log(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.log(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.log(JSON.stringify(results))
            }
        });
    });
0 голосов
/ 28 августа 2018
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.log(JSON.stringify(results))
        }
    });
});
0 голосов
/ 28 августа 2018

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

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 пытается обработать ваш параметр как функцию (обратный вызов).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...