Express中间件没有效果

我有以下代码:

var express = require('express'); var app = express(); app.use(express.bodyParser()); app.use(express.cookieParser()); var port = Number(process.env.PORT || 5000); app.get('/test/:id', function(req, res) { res.send(req.params); }); app.listen(port); console.log("Listening on port " + port); 

当我在浏览器中点击http://localhost:5000/test/12345时,我看到:

 [] 

但是我期待看到填充的id: 12345的req.params对象。 任何想法我做错了什么?

谢谢。

检查并看到,req.params实际上是一个关联数组,它几乎与对象相似,但并不完全相同。 不知道为什么明确这样定义。 它获得的唯一好处是数组的附加长度属性。 而res.send会尝试JSON.stringify你的输出,这反过来会看到它是一个数组,只有照顾数字的索引。 因此空的[]作为返回值。

你可以通过做这个validation –

 var myParams = {}; Object.keys(req.params).forEach(function(key){ myParams[key] = req.params[key]; }); res.send(myParams); 

你也可以看到JSON.stringify只关心数字索引,通过定义你的路由,

 app.get('/test/:0', function(req, res) { res.send(req.params); }); 

响应对象将以你的id命名。 如果您在浏览器的stream量中查看,您可以看到名为12345的文件。 尽pipe你可以通过在服务器端login来检查你的服务器是否获得了id。

  app.get('/test/:id', function(req, res) { console.log(req.params); res.send(req.params); }); 

如果你想传递variables到一个视图,你可能想使用res.render(...)函数,你可以在这里传递参数。

获取123451发送res.send(req.params.id);

res.send(req.params)没有得到任何东西的原因是因为req.paramsArray一个实例,而默认机制试图将数组贪婪地放到string中给你[]

你可以做什么来看到所有的参数如下:

 app.get('/test/:id', function(req, res) { res.send(require('util').inspect(req.params)); }); 

这会给你输出像(使用此URL http://localhost:5000/test/12345 ):

 [ id: '12345' ] 

这种方法也可以处理具有更多参数的路由,例如下面的代码片段,该请求http://localhost:5000/test/name/234

 app.get('/test/:name/:id', function(req, res) { res.send(require('util').inspect(req.params)); }); 

会给你:

 [ name: 'name', id: '234' ] 

或者,如果您想获得JavaScript对象的JSON格式输出,则可以使用res.json 。 但是请注意,如果您执行res.json(req.params)json也会生成[] ,因为它将以标准方式呈现req.params数组。

我希望这会有所帮助。


请注意 ,截至2014年4月9日 ( Express版本4.0.0req.params是一个对象,而不是一个数组,所以你不应该有与v4.0.0类似的问题,你的代码应该按预期工作。

 app.get('/test/:id', function(req, res) { res.send(req.params); }); 

问题不在于你的中间件。 bodyParser和cookieParser都不提供指定的url参数parsing。 这就是说,你的代码看起来是正确的。 你完全肯定你在代码更改后重新启动节点服务器吗?