Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 使用koa主体和koa路由器访问节点中的POST数据_Node.js_Ajax_Post_Koa2 - Fatal编程技术网

Node.js 使用koa主体和koa路由器访问节点中的POST数据

Node.js 使用koa主体和koa路由器访问节点中的POST数据,node.js,ajax,post,koa2,Node.js,Ajax,Post,Koa2,从用户代理制作ajax文章 $.ajax({ type: 'POST', url: 'https://mysub.domain.dev/myroute', headers: { 'X-Requested-With': 'XMLHttpRequest' }, contentType: 'application/octet-stream; charse

从用户代理制作ajax文章

$.ajax({
            type: 'POST',
            url: 'https://mysub.domain.dev/myroute',

            headers: {
              'X-Requested-With': 'XMLHttpRequest'
            },
            contentType: 'application/octet-stream; charset=utf-8',
            success: function(result) {
              successAction();
            },
            processData: false,
            data: myResult['myValue']
          });
在我的服务器上使用Koa2时,如何从帖子主体获取数据myResult['myValue']

const bodyParser = require('koa-body');

const router = new Router();
const body = bodyParser();


router.post('/myroute/', body, async (ctx, next) => {

const getMyValue = ctx.request.body.data.myValue;

}
我试过各种组合。所有对象都是未定义的或空的对象

const getMyValue = ctx.request.body
对象{}

const getMyValue = ctx.request.body.data;
未定义

const getMyValue = ctx.request.body.myResult['myValue'];

未定义的

这里发生了两件事

const getMyValue = ctx.request.body.myResult['myValue'];
首先,您需要显式地告诉
koa body
查找多部分表单数据(默认情况下是关闭的)。因此:

其次,在客户端中,您可能需要设置
enctype
,并显式地将
contentType
设置为
false
。这似乎与直觉相反,但它阻止jQuery添加一个缺少边界字符串的
ContentType
头。您的请求如下所示:

$('#go').click(evt => {
  evt.preventDefault()

  const data = new FormData($('#uploadForm')[0])
  data.append('extra', 'fields if required')

  $.ajax({
    contentType: false,
    data,
    enctype: 'multipart/form-data',
    processData: false,
    success: result => $('#result').text(result),
    type: 'POST',
    url: '...'
  })
})

请注意,示例中的
FormData
可能不适合您的用例,它只是一个方便的演示。假设这是一个文件,很可能您可以简单地使用
数据:myresult['myValue']

结果表明ajax是不必要的,因此客户端只是

 post('/myroute', {data: myResult[myValue] });
然后将koa主体注入路由器,而不首先在页面范围内实例化它。注意括号

const bodyParser = require('koa-body');

const router = new Router();

router.post('/myroute/', bodyParser(), async (ctx, next) => {

const getMyValue = ctx.request.body.data;

}

谢谢,这很有道理。一旦我有机会实现,我就会接受。事实证明,我需要的是删除行“body=bodyParser()”并在路由器中的body()中添加括号。我的用例也不需要ajax。我将在另一个答复中澄清。谢谢你的帮助!