我是新来的节点/快递..我看到GET PARAMS可以捕获像这样:的NodeJS,快速GET post数据
app.get('/log/:name', api.logfunc);
POST像这样:在
app.post('/log', ...
(表单变量可用)
我知道app.all,但是有没有一种方法可以在使用app.all时获取GET和POST的所有变量? (我太习惯$ _REQUEST在PHP :)
THX,
我是新来的节点/快递..我看到GET PARAMS可以捕获像这样:的NodeJS,快速GET post数据
app.get('/log/:name', api.logfunc);
POST像这样:在
app.post('/log', ...
(表单变量可用)
我知道app.all,但是有没有一种方法可以在使用app.all时获取GET和POST的所有变量? (我太习惯$ _REQUEST在PHP :)
THX,
你处理的参数传递的三种不同的方法:
1)路径参数,其表达的路由器捕获在req.param
中,当您在路由中使用冒号前缀组件或正则表达式捕获。这些可以出现在GET和POST请求中。
2)URL查询字符串参数,如果您使用express.query
中间件,将在req.query
中捕获这些参数。这些也可以出现在GET和POST请求中。
3)身体参数,如果您使用express.bodyParser
中间件,将在req.body
中捕获身体参数。这些只会出现在具有“x-www-form-urlencoded”Content-Type
的POST请求中。
所以你需要做的是将所有三个对象(如果它们存在)合并成一个。这样做没有本地的Object
方法,但有很多流行的解决方法。例如,underscore.js库定义的extend
功能,这将允许你写
req.params=_.extend(req.params || {}, req.query || {}, req.body || {}).
如果你不想使用一个库,并希望推出自己的延长对象的方法,看看this blog post 。
我相信'req。param()'完全是这样 - http://expressjs.com/api.html#req.param – 2013-09-12 10:43:17
Personnaly,我合并req.params
,req.body
,req.query
在一个单独的对象req.props
与Object.assign()
在ES6:
你只需要在你的路线,这样写:
app.all('/myroute/:myparam', (req, res, next) => {
// merge all req data in one
req.props = Object.assign(req.query, req.params, req.body);
// optional :
// delete req.query;
// delete req.params;
// delete req.body;
});
在ES5中:
app.all('/myroute/:myparam', function(req, res, next){
// merge all req data in one
req.props = {};
if(req.query) for (var attrname in req.query) { req.props[attrname] = req.query[attrname]; }
if(req.params) for (var attrname in req.params) { req.props[attrname] = req.params[attrname]; }
if(req.body) for (var attrname in req.body) { req.props[attrname] = req.body[attrname]; }
// optional :
// delete req.query;
// delete req.params;
// delete req.body;
});
现在,您可以轻松访问所有路线中的GET,POST,PUT参数,req.props
,如果您决定删除旧请求,请小心类似名称。
此外,你可以做一个中间件/功能,使它更有用。
更多Object.assign()
:https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Object/assign
'JSON.stringify(req.query)''为和GET''JSON.stringify(req.body)''为假设POST'你'app.use(表达。 bodyParser())' – 2012-07-26 04:21:12