Nodejs,Express GET POST PARAMS

我是Node / Express新手。我看到GET params可以像这样捕获:

app.get('/log/:name', api.logfunc); 

发布像这样:

app.post('/log', ... (在req.body中可用的表单variables)

我知道app.all,但有没有一种方法,我可以得到所有的variables为GET和POST时使用app.all? (我太习惯$ _REQUEST在PHP!:)

谢谢,

       

网上收集的解决方案 "Nodejs,Express GET POST PARAMS"

你正在处理三种不同的parameter passing方法:

1)path参数,当你在你的路由中使用冒号前缀组件或正则expression式捕获时,expression路由器在req.param捕获的path参数。 这些可以出现在GET和POST请求中。

2)URL查询string参数,如果使用express.query中间件,将会在req.query捕获这些参数。 这些也可以出现在GET和POST请求中。

3)身体参数,如果您使用express.bodyParser中间件,将会在req.body捕获这些参数。 这些只会出现在具有“x-www-form-urlencoded” Content-Type的POST请求中。

所以你需要做的是将所有三个对象(如果存在的话)合并成一个。 有没有本地的Object方法来做到这一点,但有很多stream行的解决方法。 例如, underscore.js库定义了一个extend函数,可以让你编写

 req.params=_.extend(req.params || {}, req.query || {}, req.body || {}). 

如果你不想使用图书馆,并想要自己的扩展对象的方式,看看这篇博客文章 。

Personnaly,我合并req.paramsreq.bodyreq.query在一个单一的对象req.propsObject.assign()

在ES6中:

你只需要在你的路线中写下这个:

  app.get('/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.get('/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 params和req.props ,如果您决定删除旧的请求,请小心req.props名字。

此外,你可以做一个function,使其更有用。

关于Object.assign()更多信息: https : //developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Object/assign