gpt4 book ai didi

node.js - 为什么 PUT 请求正文未定义?

转载 作者:太空宇宙 更新时间:2023-11-04 01:01:28 26 4
gpt4 key购买 nike

我正在向我的 koajs 服务器发出以下请求:

$.ajax({
type : 'PUT', // this.request.body undefined server side
// type : 'POST', // this.request.body all good server side
url : url,
data : body,
dataType : 'json'
})

但在服务器端 this.request.body 始终未定义。

如果我将请求类型更改为 POST,则可以正常工作。

有什么想法吗?

<小时/>

编辑

我正在使用koa-route

<小时/>

编辑2

刚刚意识到我正在使用 koa-body-parser,这可能更相关。

最佳答案

尝试使用 koa-body 解析器:

const bodyParser = require('koa-bodyparser')
app.use(bodyParser())

我认为 koa-router 会解析典型的请求内容、url 参数、表单等。如果你想解析包含 JSON 对象的请求正文,你需要应用一个中间件(正如 alex 提到的)。

另请检查您是否输入了有效的 JSON。

看看这个 Koa-bodyparser:

/**
* @param [Object] opts
* - {String} jsonLimit default '1mb'
* - {String} formLimit default '56kb'
* - {string} encoding default 'utf-8'
*/

return function *bodyParser(next) {
if (this.request.body !== undefined) {
return yield* next;
}

if (this.is('json')) {
this.request.body = yield parse.json(this, jsonOpts);
} else if (this.is('urlencoded')) {
this.request.body = yield parse.form(this, formOpts);
} else {
this.request.body = null;
}

yield* next;
};

JSON 的数量似乎有 1mb 的限制。然后到 co-body/lib/json.js

module.exports = function(req, opts){
req = req.req || req;
opts = opts || {};

// defaults
var len = req.headers['content-length'];
if (len) opts.length = ~~len;
opts.encoding = opts.encoding || 'utf8';
opts.limit = opts.limit || '1mb';

return function(done){
raw(req, opts, function(err, str){
if (err) return done(err);

try {
done(null, JSON.parse(str));
} catch (err) {
err.status = 400;
err.body = str;
done(err);
}
});
}
};

关于node.js - 为什么 PUT 请求正文未定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26498304/

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