gpt4 book ai didi

node.js - 使用 koa-body 和 koa-router 访问 Node 中的 POST 数据

转载 作者:太空宇宙 更新时间:2023-11-03 21:49:07 27 4
gpt4 key购买 nike

从用户代理进行 ajax POST

$.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,如何从 POST 正文中获取数据 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'];

未定义

最佳答案

这里发生了一些事情。

首先,您需要明确告诉 koa-body 查找多部分表单数据(默认情况下关闭)。所以:

const koaBody = require('koa-body')

router.post('/myroute', koaBody({ multipart: true }),
async (ctx, next) => {
// ctx.request.body.fields: additional (non-file) fields
// ctx.request.body.files: files (octet-stream)
})

其次,在客户端中,您可能需要设置 enctype 并将 contentType 显式设置为 false。这似乎违反直觉,但它阻止 jQuery 添加会丢失边界字符串的 ContentType header 。您的请求将如下所示:

$('#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 可能不适合您的用例,这只是一个方便的演示。假设这是一个文件,您可能只需使用 data: myresult['myValue'] 即可。

关于node.js - 使用 koa-body 和 koa-router 访问 Node 中的 POST 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47943221/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com