Я немного новичок в 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)
он по-прежнему показывает ту же ошибку
Тогда покажите, как вы переписали код.
ваш отредактированный код неверен, вам нужно связать параметры в один массив, а не в два разных массива. Должен быть [req.params.sender_id,req.params.receiver_id] instead of [req.params.sender_id],[req.params.receiver_id]
Почему вы все еще используете два массива для передачи параметров в MySQL в коде отредактировал? Что же тогда редактировать?





Шаблон определения маршрута в вашем коде в порядке (проверьте эта ветка для альтернатив), проблема в другом: вы должны использовать один массив для передачи всех значений для запроса (документы), а не отдельный массив для каждого параметра. Например:
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
Вы изменили код описанным способом? Если да, то в чем именно заключается сообщение?
да, я изменил код, но когда я вызываю его из приложения, он по-прежнему показывает ту же ошибку на консоли
Хорошо, в чем ошибка, сообщение? Вы показали только первую строчку.
Если я попробую этот код, URL-адрес станет 104.131.162.126:3000/getData?receiver_id=1&sender_id=2, и он покажет тот же журнал в консоли. Что мне делать, чтобы решить эту ошибку?
Попробуйте таким образом
Сформируйте 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))
}
});
});
ну, я тоже пробовал, но все равно показывает ту же ошибку
Ваш ответ вводит в заблуждение; нет ничего плохого в том, чтобы записать путь так, как это сделал OP, проблема в коде привязки.
Просто скопируйте и вставьте мой код в свой проект и сформируйте правильный URL-адрес, затем протестируйте API @ Neha
@PrashantGupta пробовала оба способа, но все та же ошибка
Я добавил еще один способ сделать это, попробуйте @Neha
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-адрес для передачи параметров
104.131.162.126:3000/getData/1/2
Вы добавили точно такое же сообщение; пожалуйста, удалите его - и убедитесь, что код обновлен, а сервер перезапущен.