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.params
是Array
一个实例,而默认机制试图将数组贪婪地放到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.0 ) req.params
是一个对象,而不是一个数组,所以你不应该有与v4.0.0类似的问题,你的代码应该按预期工作。
app.get('/test/:id', function(req, res) { res.send(req.params); });
问题不在于你的中间件。 bodyParser和cookieParser都不提供指定的url参数parsing。 这就是说,你的代码看起来是正确的。 你完全肯定你在代码更改后重新启动节点服务器吗?