nodejs取参四种方法req.body,req.params,req.param,req.body
获取请求很中的参数是每个web后台处理的必经之路,nodejs的 express框架 提供了四种方法来实现。
req.body
req.query
req.params
req.param()
首先介绍第一个req.body
- <code class="hljs sql" style="">官方文档解释:
- Contains key-value pairs of data submitted in the request body. By default, it is undefined,
- and is populated when you <span class="hljs-keyword" style="">use</span> <span class="hljs-keyword" style="">body</span>-parsing middleware such <span class="hljs-keyword" style="">as</span> <span class="hljs-keyword" style="">body</span>-parser <span class="hljs-keyword" style="">and</span> multer.
- 稍微翻译一下:包含了提交数据的键值对在请求的<span class="hljs-keyword" style="">body</span>中,默认是underfined,
- 你可以用<span class="hljs-keyword" style="">body</span>-parser或者multer来解析<span class="hljs-keyword" style="">body</span></code>
解析body不是nodejs默认提供的,你需要载入body-parser中间件才可以使用req.body
此方法通常用来解析POST请求中的数据
第二种是req.query
- <code class="hljs cs" style="">官方文档解释:
- An <span class="hljs-keyword" style="">object</span> containing a property <span class="hljs-keyword" style="">for</span> each query <span class="hljs-keyword" style="">string</span> parameter <span class="hljs-keyword" style="">in</span> the route.
- If there <span class="hljs-keyword" style="">is</span> no query <span class="hljs-keyword" style="">string</span>, it <span class="hljs-keyword" style="">is</span> the empty <span class="hljs-keyword" style="">object</span>, {}.
- 翻译一下:包含在路由中每个查询字符串参数属性的对象。如果没有,默认为{}</code>
有nodejs默认提供,无需载入中间件
举例说明(官方摘抄):
- <code class="hljs haskell" style="">// <span class="hljs-type" style="">GET</span> /search?q=tobi+ferret
- <span class="hljs-title" style="">req</span>.query.q
- // => <span class="hljs-string" style="">"tobi ferret"</span>
- // <span class="hljs-type" style="">GET</span> /shoes?order=desc&shoe[color]=blue&shoe[<span class="hljs-class" style=""><span class="hljs-keyword" style=""><span class="hljs-class" style=""><span class="hljs-keyword" style="">type</span></span></span><span class="hljs-class" style="">]=converse</span></span>
- <span class="hljs-title" style="">req</span>.query.order
- // => <span class="hljs-string" style="">"desc"</span>
- <span class="hljs-title" style="">req</span>.query.shoe.color
- // => <span class="hljs-string" style="">"blue"</span>
- <span class="hljs-title" style="">req</span>.query.shoe.<span class="hljs-class" style=""><span class="hljs-keyword" style="">type</span></span>
- // => <span class="hljs-string" style="">"converse"</span></code>
此方法多适用于GET请求,解析GET里的参数
第三种是 req.params
- <code class="hljs cs" style="">官方文档:
- An <span class="hljs-keyword" style="">object</span> containing properties mapped to the named route “parameters”.
- For example, <span class="hljs-keyword" style="">if</span> you have the route /user/:name,
- then the “name” property <span class="hljs-keyword" style="">is</span> available <span class="hljs-keyword" style="">as</span> req.<span class="hljs-keyword" style="">params</span>.name. This <span class="hljs-keyword" style="">object</span> defaults to {}.
- 翻译:包含映射到指定的路线“参数”属性的对象。
- 例如,如果你有route/user/:name,那么“name”属性可作为req.<span class="hljs-keyword" style="">params</span>.name。
- 该对象默认为{}。</code>
nodejs默认提供,无需载入其他中间件
举例说明
- <code class="hljs cs" style=""><span class="hljs-comment" style="">// GET /user/tj</span>
- req.<span class="hljs-keyword" style="">params</span>.name
- <span class="hljs-comment" style="">// => "tj"</span></code>
多适用于restful风格url中的参数的解析
req.query与req.params的区别
req.params包含路由参数(在URL的路径部分),而req.query包含URL的查询参数(在URL的?后的参数)。
最后一种req.param()
此方法被弃用,请看官方解释
- <code class="hljs css" style=""><span class="hljs-selector-tag" style="">Deprecated</span>. <span class="hljs-selector-tag" style="">Use</span> <span class="hljs-selector-tag" style="">either</span> <span class="hljs-selector-tag" style="">req</span><span class="hljs-selector-class" style="">.params</span>, <span class="hljs-selector-tag" style="">req</span><span class="hljs-selector-class" style="">.body</span> <span class="hljs-selector-tag" style="">or</span> <span class="hljs-selector-tag" style="">req</span><span class="hljs-selector-class" style="">.query</span>, <span class="hljs-selector-tag" style="">as</span> <span class="hljs-selector-tag" style="">applicable</span>.
- 翻译:被弃用,用其他三种方式替换</code>
取得 GET Request 的 Query Strings:
GET /test?name=fred&tel=0926xxx572
app.get('/test', function(req, res) {
console.log(req.query.name);
console.log(req.query.tel);
});
如果是表单且是用 POST method:
<form action='/test' method='post'>
<input type='text' name='name' value='fred'>
<input type='text' name='tel' value='0926xxx572'>
<input type='submit' value='Submit'>
</form>
app.post('/test', function(req, res) {
console.log(req.query.id);
console.log(req.body.name);
console.log(req.body.tel);
});
当然也可以 Query Strings 和 POST method 的表单同时使用:
<form action='/test?id=3' method='post'>
<input type='text' name='name' value='fred'>
<input type='text' name='tel' value='0926xxx572'>
<input type='submit' value='Submit'>
</form>
app.post('/test', function(req, res) {
console.log(req.query.id);
console.log(req.body.name);
console.log(req.body.tel);
});
顺带补充,还有另一种方法传递参数给 Server,就是使用路径的方式,可以利用 Web Server 的 HTTP Routing 來解析,常见于各种 Web Framework。這不算是传统标准规范的做法,是属于 HTTP Routing 的延伸应用。
GET /hello/fred/0926xxx572
app.get('/hello/:name/:tel', function(req, res) {
console.log(req.params.name);
console.log(req.params.tel);
});
nodejs取参四种方法req.body,req.params,req.param,req.body的更多相关文章
- 67.nodejs取参四种方法req.body,req.params,req.param,req.body
转自:http://www.cnblogs.com/jkingdom/p/8065202.html 摘要: nodejs取参四种方法req.body,req.params,req.param,req. ...
- nodejs取参四种方法 req.body, req.params, req.param, req.body
获取请求很中的参数是每个web后台处理的必经之路,nodejs的 express框架 提供了四种方法来实现. req.body req.query req.params req.param() 首先介 ...
- node.js取参四种方法req.body,req.params,req.param,req.body
参考:https://my.oschina.net/u/2519530/blog/535309 获取请求很中的参数是每个web后台处理的必经之路,nodejs的 express框架 提供了四种方法来实 ...
- nodeJS学习(11)--- nodeJS 取参 -- req.body & req.query & req.params
参考:https://my.oschina.net/u/2519530/blog/535309 获取请求中的参数是每个web后台处理的必经之路,nodejs的 express框架 提供了四种方法来实现 ...
- Java中取小数点后两位(四种方法)
摘自http://irobot.iteye.com/blog/285537 Java中取小数点后两位(四种方法) 一 Long是长整型,怎么有小数,是double吧 java.text.D ...
- Angular--页面间切换及传值的四种方法
1. 基于ui-router的页面跳转传参(1) 在AngularJS的app.js中用ui-router定义路由,比如现在有两个页面,一个页面(producers.html)放置了多个produce ...
- IOS中Json解析的四种方法
作为一种轻量级的数据交换格式,json正在逐步取代xml,成为网络数据的通用格式. 有的json代码格式比较混乱,可以使用此“http://www.bejson.com/”网站来进行JSON格式化校验 ...
- (转载)eclipse插件安装的四种方法
eclipse插件安装的四种方法 Eclipse插件的安装方法 1.在eclipse的主目录(ECLIPSE_HOME, 比如在我的机器上安装的目录是:D:\eclipse)有一个plugins的目录 ...
- 转载:遍历Map的四种方法
http://www.cnblogs.com/kristain/articles/2033566.html 遍历Map的四种方法 public static void main(String[] ar ...
随机推荐
- C++STL之vector向量容器
vector向量容器 vector向量容器不但能向数组一样对元素进行随机访问, 还能在尾部插入元素 vector具有内存自动管理的功能, 对于元素的插入和删除, 可动态调整所占的内存空间 vect ...
- 【翻译】Emmet(Zen Coding)官方文档 之六 自定义 Emmet
[说明]本系列博文是依据 Emmet 官方文档翻译的,原文地址为:http://docs.emmet.io/,部分内容已经在博主之前的博文中节选过,为方便已经收藏过之前博文的朋友,没有删除这些博文,仅 ...
- pooling
转自:http://www.gageet.com/2014/09182.php 本文部分参考了:http://www.zhihu.com/question/23437871 卷积层是对图像的一个邻域进 ...
- virtual base classes
virtual base classes用来实现菱形继承解决多个重复subobject的问题 //: C09:VirtualBase.cpp // Shows a shared subobject v ...
- 打包时ElementUI使vendor.js文件体量过大优化方法
<h1> 1.在index.html中以CDN的方式引入 </h1> <p> 引入的时候注意:要先在引入之前引入VUE否则会报undedined prototype ...
- ECSHOP快递物流单号查询插件
本ECSHOP快递物流单号跟踪插件提供国内外近2000家快递物流订单单号查询服务例如申通快递.顺丰快递.圆通快递.EMS快递.汇通快递.宅急送快递.德邦物流.百世快递.汇通快递.中通快递.天天快递等知 ...
- 对Neural Machine Translation by Jointly Learning to Align and Translate论文的详解
读论文 Neural Machine Translation by Jointly Learning to Align and Translate 这个论文是在NLP中第一个使用attention机制 ...
- C++基础 namespace register bool
1. namespace (1)命令空间 C中的命名空间 在C中只有一个全局作用域 C语言中所有全局标识符共享同一个作用域 标识符之间可能发生冲突 C++中提出了命名空间的概念 命令空间将全局作用域分 ...
- mysql sum 为 0 的解决方法
使用SQL语句SUM函数的时候,默认查询没有值的情况下返回的是null,而实际可能我们要用的是返回0. 解决方法:SELECT SUM(count) FROM test_table 改成: SELEC ...
- Git ---游离状态下的commit 分支切换与找回,commit之后无法找到历史记录
commit之后无法找到历史记录 https://blog.csdn.net/zyb2017/article/details/78307688