我在bodyParser中使用Express收到错误是无法解析任何PUT请求...我的配置设置如下:
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.query());
app.use(app.router);
但是,每次我向端点发出PUT请求时,req.body都会返回' undefined'。
我尝试过通过Chromes REST控制台提出请求,也通过jQuery ajax请求这样做:
$.ajax({
url: 'https://localhost:4430/api/locations/5095595b3d3b7b10e9f16cc1',
type: 'PUT',
data: {name: "Test name"},
dataType: 'json'
});
有什么想法吗?
答案 0 :(得分:6)
您还需要将Content-Type设置为application/json
。你的jQuery请求应该是:
$.ajax({
url: 'https://localhost:4430/api/locations/5095595b3d3b7b10e9f16cc1',
type: 'PUT',
contentType: 'application/json',
data: JSON.stringify({name: "Test name"}),
dataType: 'json'
});
否则,正文解析器不会尝试解析正文。
编辑:这是我的测试代码
运行express test
在/test
中添加app.js
路线:
app.all('/test', routes.test);
和routes/index.js
:
exports.test = function (req, res) { console.log(req.body); res.send({status: 'ok'}); };
$(function () { $('#test').click(function () { $.ajax({ url: '/test', type: 'PUT', contentType: 'application/json', data: JSON.stringify({name: "Test name"}), dataType: 'json' }); }); });
当我运行时,我得到以下日志:
Express server listening on port 3000 GET / 200 26ms - 333 GET /stylesheets/style.css 304 2ms GET /javascripts/test.js 304 1ms { name: 'Test name' } PUT /test 200 2ms - 20