为什么req.params返回undefined?

我在这里检查了两个类似的问题,评论中提到的东西都没有为我工作。

app.get('/:id', function(req,res) { console.log(req.params.id); }); app.get('/:id', function(req, res) { db.query("SELECT * FROM entries WHERE id = $1", [req.params.id], function(err, dbRes) { if (!err) { res.render('show', { entry: dbRes.rows[0] }); } }); }); 

正如你所看到的,我已经尝试将结果logging到控制台,看看发生了什么。 访问有问题的URL只是使页面加载,直到超时。 在控制台中,我得到“未定义”。

我如何定义req.params? 或者它的定义在哪里被拉取,为什么它不返回值?

完整的上下文: http : //pastebin.com/DhWrPvjP

只是testing你的代码,它工作正常。 我想你可能会缺less你的url参数。 它应该是http://localhost:3000/1 – 或者任何你想要检索的ID。 试试看。

另外,你应该把扩展选项传递给你的bodyParser.urlencode方法: express抛出错误,因为`body-parser deprecated undefined extended`

编辑:要具体回答您有关定义请求参数的问题。 除了确保传入正确的URL之外,您不必做任何事情来定义请求参数。 Express负责parsingURL并为您定义请求参数。 所以,如果你去你的服务器上的URL http://localhost/jimbob那么传递给id参数的值将作为req.params.id 。 请参阅此链接的请求参数了解更多信息。

编辑2:你可以尝试debugging你的应用程序,看看你得到什么。 以下是如何在Express中启用debugging以及如何使用节点检查器进行debugging的链接。 我看到你在Ubuntu上运行这个。 所以,那里可能有一些我不知道的奇怪的东西。 (我在Mac上运行它)

我还会检查在应用程序所在的计算机上运行的节点版本,并检查Ubuntu环境(或任何不适用的计算机)上的节点版本。

 app.get('/:id', function(req, res) { db.query("SELECT * FROM entries WHERE id = $1", [req.params.id], function(err, dbRes) { if (!err) { res.render('show', { entry: dbRes.rows[0] }); } }); }); 

在你的代码中,url将是localhost / some-id req.params.id将等于some-id,params从urlstring中直接拉出来,如果你正尝试用post发送信息或者获取想要使用req的方法。 body和req.query分别。 我没有看到任何理由,你wouldnt能够得到的身份证,除非url是错误的

或者如果你需要手动完成

 app.get('/:id', function(req, res) { //if no req.params and assuming the id is the last item in the url var urlArray = req.url.split('/'), id = urlArray[urlArray.length-1]; db.query("SELECT * FROM entries WHERE id = $1", [req.params.id], function(err, dbRes) { if (!err) { res.render('show', { entry: dbRes.rows[0] }); } }); }); 

试试这个req.param('id') :D。 它可能正在为你工作