跳到主要内容
CNode

egg的controller里面怎么获取请求的参数啊

问答
FFlyerJay发布于 9 年前最后回复 9 年前
18158880

不管用this.ctx.body还是this.params都获取不到参数

查看回复

回复 (18)

S
SunShinewyf#189 年前

@cmygit 你说的 "但因为文档router的章节会引导到这个crfs表单提交的的示例",没看到这个文档中有这个明确的 form 表单的例子呢,不知道是不是说的这里: https://github.com/eggjs/examples/blob/master/multipart/app/view/page/form.html

C
cmygit#179 年前

@atian25 大大,你好,虽然我直到这个坑是属于基础知识问题,但因为文档router的章节会引导到这个crfs表单提交的的示例,总有人会踩...我建议应该在文档中标注一下设置enctype="multipart/form-data"是针对文件上传的。

C
cmygit#169 年前

是不是form表单设置了enctype="multipart/form-data"属性? 我也遇到这个问题,由于楼主没有上代码,不知道你实际问题是啥,我说下我遇到的问题吧! 看egg的文档的时候,看到router那里,直接提交提交post请求是报错的,因为文档有说明,安全威胁 CSRF 的防范。 然后在该章节的示例代码中,form表单是这个样子的:

title: file: upload 关键是enctype="multipart/form-data" enctype 属性规定在发送到服务器之前应该如何对表单数据进行编码。 默认地,表单数据会编码为 "application/x-www-form-urlencoded"。就是说,在发送到服务器之前,所有字符都会进行编码(空格转换为 "+" 加号,特殊符号转换为 ASCII HEX 值)。 属性取值: 1.application/x-www-form-urlencoded:在发送前编码所有字符(默认) 2.multipart/form-data :不对字符编码。在使用包含文件上传控件的表单时,必须使用该值。 3.text/plain:空格转换为 "+" 加号,但不对特殊字符编码。 结论:示例中是文件上传,所以设置了enctype="multipart/form-data",不对字符编码(所以ctx.request.body获取不到值了?)。如果是普通的表单提交,不要设置enctype属性(其实有个默认值),在发送前编码所有字符!这样ctx.request.body就能获取值了。
A
atian25#159 年前

@sandisen 自己开一个帖子去回复啊,不要到处影响别人

A
atian25#149 年前
引用 FlyerJay@atian25 这个文档我也看过,可能是用法有点问题,已经解决了

@FlyerJay 什么问题? 解决了可以描述出来啊

F
FlyerJay#129 年前
引用 hwj128911用this.ctx.query试试 来自酷炫的 CNodeMD

@hwj128911 query是查询get参数的

A
atian25#119 年前

一般提问总要附上代码吧,给个截图怎么猜。。

  • ctx.body 是输出的,不是读取的,ctx.body = 'hi, egg';
  • ctx.request.body 是输入的 POST body
  • ctx.query 才是输入的查询参数 /news?page=12 -> ctx.query.page
  • ctx.param 是路由匹配的,来自于 koa-router,/users/:id -> ctx.param.id

上面这些其实都不属于 egg 的扩展了,就是 koa 的基础。建议再回去看看 koa 和 egg 的文档。 http://koajs.com/#request

H
hwj128911#109 年前

用this.ctx.query试试

来自酷炫的 CNodeMD

L
lzq920#89 年前
引用 FlyerJay@461534898 好像是我的request里面没有body这个对象

@FlyerJay ctx.request.body这个对象后面跟上你要取得那个字段名就OK啊

O
okoala#79 年前

@FlyerJay 你最好放个能重现的项目,一看代码就知道了~ 不然这样只靠猜,效率很低~

F
FlyerJay#69 年前

3.png

F
FlyerJay#59 年前
F
FlyerJay#49 年前
引用 lzq920那看你是什么提交的了。如果是form表单提交的,就用ctx.request.body就取到了

@461534898 我就是用这个没取到。。。我也不知道为什么这么简单的东西我会遇到问题。。。

L
lzq920#39 年前

那看你是什么提交的了。如果是form表单提交的,就用ctx.request.body就取到了

F
FlyerJay#29 年前

1.png2.png

F
FlyerJay#19 年前

this.ctx.request 和 this.ctx.req里面也没有,是不是我什么地方配置有问题,

参与回复

登录后即可参与回复。登录