如何在 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);
);
);
但我得到了 undefined
id 的值 (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