如何在 Express 中获取 URL 参数?

Posted

技术标签:

【中文标题】如何在 Express 中获取 URL 参数?【英文标题】:How to get URL parameter in Express? 【发布时间】: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))。 我做错了什么?

【问题讨论】:

如果我的回答解决了您的问题,请告诉我:) 【参考方案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)。

以上是关于如何在 Express 中获取 URL 参数?的主要内容,如果未能解决你的问题,请参考以下文章

如何从服务器端 express/mongo/mongoose 中的 URL,客户端的 axios/react/redux 中获取参数 ID

node-express 如何在 URL 查询字符串中传递 DATE 参数以及如何解析它

如何在 Express 中获取完整的 URL?

express中 获取参数的几种形式

express中url的参数传递和获取

express 无法从 url 获取查询参数 [重复]