req.body,req.query,req.params,req.param()取参数

本文介绍了Node.js的Express框架中获取请求参数的四种方法:req.body用于解析POST请求数据;req.query用于GET请求参数解析;req.params用于路由参数;req.param()已弃用。
nodejs的express框架为我们提供了四种方法来实现获取请求中的参数:

1.req.body
2.req.query
3.req.params
4.req.param()

1.req.body

通常用来解析POST请求中的数据
req.body不是nodejs默认提供的,需要载入中间件body-parser中间件才可以使用req.body
例如前台代码:

//jade模板
#signupModal.modal.fade
  .modal-dialog
    .modal-content
      form(method="POST",action="/user/signup")
        .modal-header 注册
        .modal-body
          .form-group
            label(for="signupName") 用户名
            input#signupName.form-control(name="user[name]",type="text")
          .form-group
            label(for="signupPassword") 密码
            input#signupPassword.form-control(name="user[password]",type="password")
        .modal-footer
          button.btn.btn-default(type="button",data-dismiss="modal") 关闭
          button.btn.btn-success(type="submit") 提交

后台代码:

var bodyParser = require('body-parser');
app.post('/user/signup',function (req,res) {
   var _user = req.body.user;
})
req.query

是由nodejs默认提供,无需载入中间件,此方法多适用于GET请求,解析GET请求中的参数
包含在路由中每个查询字符串参数属性的对象,如果没有则为{}
举例:

// GET /shoes?order=desc&shoe[color]=blue&shoe[type]=converse
req.query.order
// => "desc"
req.query.shoe.color
// => "blue"
req.query.shoe.type
// => "converse"
req.params

包含映射到指定的路线“参数”属性的对象

例如,如果你有route/user/:name,那么“name”属性可作为req.params.name。
nodejs默认提供,无需载入其他中间件

postget方式提交的表单的参数的获取,都可用req.params获取,但是需要注意的是:
假设现在我们以Post方式提交表单,在后台我们要获取到userid这个参数

我们提交的路径是/user/signup?1111userid=1122

这时如果我们通过req.params.userid获取到的并不是post表单提交上来的参数,这时因为req.params包含映射到指定的路线“参数”属性的对象,所以它在解析参数的时候包含URL中的路由,它获取的顺序是:
1.url中路由参数
2.post请求中提交参数
3.get请求中的参数
这里获取到的是1111,

如果提交的路径为:/user/signup?userid=1122
req.params.userid获取到的就是post提交的参数
req.param()

此方法被弃用,请看官方解释

Deprecated. Use either req.params, req.body or req.query, as applicable.
翻译:被弃用,用其他三种方式替换
public class FailureModelApi { private static final long OFFSET = TimeUnit.DAYS.toMillis(1); private static final String THE_TIME_RANGE_EXCEEDS_THE_LIMIT = "The time range exceeds the limit"; @Autowired private EsDdiEventService esDdiEventService; @Autowired private EsFailureModelAnalyzeService esFailureModelAnalyzeService; /** * getVersionComparison * * @param request the request * @param req the versionComparisonRequest req * @param acceptLanguage language * @return base response */ @PostMapping(value = "/overview/version-comparison", produces = {Constants.APPLICATION_JSON_UTF8}) public BaseResponse<?> getVersionComparison( @AuthValidator(supportTokenType = AuthValidator.TOKEN_TYPE_APP, permissions = PermissionConstants.INTERNAL_QUERY_FAILURE_MODEL) HttpServletRequest request, @RequestHeader("Accept-Language") String acceptLanguage, @RequestBody VersionComparisonRequest req) { if (req.getStartTime() == null || req.getEndTime() == null) { req.setEndTime(System.currentTimeMillis()); req.setStartTime(req.getEndTime() - OFFSET); } if (req.getEndTime() - req.getStartTime() > Constants.FOUR_MONTH) { log.error(THE_TIME_RANGE_EXCEEDS_THE_LIMIT); return BaseResponseUtil.error(BaseResponseEnum.TIME_FILTER_ILLEGAL.getCode()); } return esFailureModelAnalyzeService.getVersionComparisonVoBaseResponse(req, new ArrayList<>(), false); } /** * 获TOP N故障 * * @param request the request * @param req the req * @return base response */ @PostMapping(value = "/overview/top-n-fault", produces = {Constants.APPLICATION_JSON_UTF8}) public BaseResponse<?> getTopNFault( @AuthValidator(supportTokenType = AuthValidator.TOKEN_TYPE_APP, permissions = PermissionConstants.INTERNAL_QUERY_FAILURE_MODEL) HttpServletRequest request, @RequestBody GetTopNFaultsRequest req) { if (req.getStartTime() == null || req.getEndTime() == null) { req.setEndTime(System.currentTimeMillis()); req.setStartTime(req.getEndTime() - OFFSET); } if (req.getEndTime() - req.getStartTime() > Constants.FOUR_MONTH) { log.error(THE_TIME_RANGE_EXCEEDS_THE_LIMIT); return BaseResponseUtil.error(BaseResponseEnum.TIME_FILTER_ILLEGAL.getCode()); } return esFailureModelAnalyzeService.getTopNFaults(req, "", false); } /** * faultPercentage * * @param request the request * @param req the req * @return base response */ @PostMapping(value = "/overview/fault-percentage", produces = {Constants.APPLICATION_JSON_UTF8}) public BaseResponse<?> faultPercentage( @AuthValidator(supportTokenType = AuthValidator.TOKEN_TYPE_APP, permissions = PermissionConstants.INTERNAL_QUERY_FAILURE_MODEL) HttpServletRequest request, @RequestBody GetFaultPercentageRequest req) { if (req.getStartTime() == null || req.getEndTime() == null) { req.setEndTime(System.currentTimeMillis()); req.setStartTime(req.getEndTime() - OFFSET); } if (req.getEndTime() - req.getStartTime() > Constants.FOUR_MONTH) { log.error(THE_TIME_RANGE_EXCEEDS_THE_LIMIT); return BaseResponseUtil.error(BaseResponseEnum.TIME_FILTER_ILLEGAL.getCode()); } return esFailureModelAnalyzeService.getFaultPercentage(req, "", false); } /** * topNVehicle * * @param request the request * @param req the req * @return base response */ @PostMapping(value = "/overview/top-n-vehicle", produces = {Constants.APPLICATION_JSON_UTF8}) public BaseResponse<?> topNVehicle( @AuthValidator(supportTokenType = AuthValidator.TOKEN_TYPE_APP, permissions = PermissionConstants.INTERNAL_QUERY_FAILURE_MODEL) HttpServletRequest request, @RequestBody GetTopNVehicleReq req) { if (req.getStartTime() == null || req.getEndTime() == null) { req.setEndTime(System.currentTimeMillis()); req.setStartTime(req.getEndTime() - OFFSET); } if (req.getEndTime() - req.getStartTime() > Constants.FOUR_MONTH) { log.error(THE_TIME_RANGE_EXCEEDS_THE_LIMIT); return BaseResponseUtil.error(BaseResponseEnum.TIME_FILTER_ILLEGAL.getCode()); } return BaseResponseUtil.success(BaseResponseEnum.SUCCESS.getCode(), esFailureModelAnalyzeService.getTopNVehicle(req)); } /** * eventList * * @param request the request * @param req the req * @return base response */ @PostMapping(value = "/overview/event/list", produces = {Constants.APPLICATION_JSON_UTF8}) public BaseResponse<?> eventList( @AuthValidator(supportTokenType = AuthValidator.TOKEN_TYPE_APP, permissions = PermissionConstants.INTERNAL_QUERY_FAILURE_MODEL) HttpServletRequest request, @RequestBody FailureBuildGetEventPageReq req) { if (req.getStartTime() == null || req.getEndTime() == null) { req.setEndTime(System.currentTimeMillis()); req.setStartTime(req.getEndTime() - OFFSET); } if (req.getEndTime() - req.getStartTime() > Constants.FOUR_MONTH) { log.error(THE_TIME_RANGE_EXCEEDS_THE_LIMIT); return BaseResponseUtil.error(BaseResponseEnum.TIME_FILTER_ILLEGAL.getCode()); } return BaseResponseUtil.success(BaseResponseEnum.SUCCESS.getCode(), esDdiEventService.getEsProblemVoEsPageInfo(req)); } } 有重复代码,可以提公共方法吗
最新发布
10-15
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值