【问题标题】:How to get URL parameter in Express?如何在 Express 中获取 URL 参数?
【发布时间】:2016-02-03 19:54:24
【问题描述】:

我在 Express 中获取 URL 参数时遇到问题。 在客户端(Angular)上,我定义状态(ui.router)并发送带有新状态的 URL(id):

.state('home.detail', {
  url: '/:id',
  templateUrl: 'views/detail.html',
  controller: 'DetailController'
 });

在后端,我正在尝试获取此 URL(id)

app.get('/api/:id', function(req,res){
    var id = req.query.id;
    console.log(id);

    var queryString = "SELECT * FROM `table` WHERE table.ID=id";
    //add to a callback
    connection.query(queryString, function (error, results) {
        if(error) {
            throw error;
        }
        else { 
            // send JSON object to the client
            res.end(JSON.stringify(results));
            //console.log(res);
        }
    });
});

但我得到了 undefinedid 的值 (console.log(id))。 我做错了什么?

【问题讨论】:

  • 如果我的回答解决了您的问题,请告诉我:)

标签: angularjs node.js express angular-ui-router


【解决方案1】:

你应该改用这个:

var id = req.params.id;
  • req.params 包含路由参数(在 网址)
  • req.query 包含 URL 查询参数(在 ? 之后 网址)。

【讨论】:

    【解决方案2】:

    :id 被放入请求的 params 对象中。所以,你所要做的就是做:

    var id = req.params.id;
    

    此外,当您构建 queryString 时,您需要将 id 的值而不是名为“id”的字符串传递给它。你必须这样做:

    var queryString = "SELECT * FROM `table` WHERE table.ID=" + id;
    

    【讨论】:

    • 我尝试使用 req.params.id 并将查询更改为 var queryString = "SELECT * FROM table WHERE table.ID=" + id; 并收到错误:ER_PARSE_ERROR: You have an error in your SQL syntax;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 ':id' 附近使用正确的语法。我需要使用一些 URL 解析器吗?谢谢
    • 如果这是一个 MySQL 错误,那么您只需要重新格式化您的查询字符串,但是 MySQL 的版本需要它。 expressJS 上下文中的查询解析器用于解析 url 中的查询参数。因此,如果用户调用了“example.com?id=5&name=hello”,查询解析器将在 req.query 对象中为您解析出“id”和“name”(仅举个例子)。
    • 我已经安装了node-mysql 并且新格式是:connection.query('SELECT * FROM table WHERE ID = ?', [ id ], function (error, results) { if(error) { throw error; } else { // send JSON object to the client res.end(JSON.stringify(results)); //console.log(res); } }); 错误消失了,但是当我在console.log (:id) 中得到一个名字而不是值(1)运行应用程序。有趣的是,当我尝试手动访问 API (localhost/api/:1) 时,我得到了数据,并且在日志中输入了 id (1)。
    猜你喜欢
    • 1970-01-01
    • 2019-01-20
    • 2018-09-09
    • 2015-08-21
    • 2017-09-30
    • 2020-12-22
    • 2020-05-02
    • 2016-03-17
    相关资源
    最近更新 更多