【问题标题】:How to pass multiple GET parameters to Express?如何将多个 GET 参数传递给 Express?
【发布时间】:2019-02-02 21:13:51
【问题描述】:

我对 Node.js 有点陌生,并且在 Node.js 中编写了一些 REST API。对于我的一个 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)

【问题讨论】:

  • 您添加了完全相同的消息;请删除它 - 并确保更新代码并重新启动服务器。
  • 它仍然显示相同的错误
  • 请说明你是如何重写代码的。
  • 您编辑的代码不正确,您必须将参数绑定到一个数组而不是两个不同的数组中。应该是[req.params.sender_id,req.params.receiver_id] instead of [req.params.sender_id],[req.params.receiver_id]
  • 你到底为什么在edited代码中仍然使用两个数组将参数传递给MySQL?那么编辑是什么?

标签: node.js express get routes


【解决方案1】:

您的代码中的路由定义模式很好(检查this thread 以获取替代方案),问题不同:您应该使用单个数组来传递所有查询值(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 包尝试将您的参数视为函数(回调)。

【讨论】:

  • 如何解决这个错误?因为它显示/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 并且在控制台中显示相同的日志。我该如何解决这个错误?
【解决方案2】:

这样试试 在此fromatlocalhost:portno/getData/:receiver_id/:sender_idEx: localhost:portno/getdata/12/21形成url

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))
            }
        });
    });

【讨论】:

  • 好吧,我也试过了,但它仍然显示同样的错误
  • 您的回答具有误导性;像OP那样写路径没有错,问题出在绑定代码上。
  • 只需将我的代码复制粘贴到您的项目中并形成正确的 url 然后测试 API@Neha
  • @PrashantGupta 尝试了这两种方法,但仍然是同样的错误
  • 我添加了另一种方法来做到这一点,请尝试@Neha
【解决方案3】:
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))
        }
    });
});

【讨论】:

  • 给我测试 url 以了解如何传递参数
  • 104.131.162.126:3000/getData/1/2
猜你喜欢
  • 2014-04-23
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-25
  • 2021-10-31
  • 2016-07-16
  • 2012-06-11
相关资源
最近更新 更多