我正在构建一个使用REST API与服务器通信的Web应用程序,使用Expres.js在Node.js中构建。问题是我似乎无法在PUT
请求中阅读请求正文。我的客户端代码:
$.ajax({
url: "/api/model/"+this.database,
type: "PUT",
contentType: "application/json",
data: this.model.exportJSON(),
success: function(data){
console.log(data);
}
});
和服务器端代码(只有重要位):
//in the main file
var express = require("express");
var app = express();
var model = require("./apis/model");
app.put("/api/model/:model", model.put);
app.listen(8000);
//in the module
module.exports = {
put: function(req, res){
console.log(req.body);
res.json({"hello": "world"});
}
};
模型上的exportJSON方法产生一个对象,而不是任何空的,但是在服务器端console.log上我得到undefined
,我做错了什么?
编辑:Chrome开发者控制台显示数据发送得很好,因此它必须是服务器端的内容
答案 0 :(得分:2)
因为您要发送'application / json'的内容类型,所以需要添加body-parser
中间件:
$ npm install body-parser
然后使用它:
//in the main file
var express = require("express");
var app = express();
var body = require('body-parser');
app.use(body.json());
app.put("/api/model/:model", function (req, res){
console.log(req.body);
res.json({"hello": "world"});
});
app.listen(8000);
然后提出请求
$ curl -i -H "Content-Type: application/json" -X PUT -d '{ "key": "value" }' http://localhost:8000/api/model/foo
这将记录
{ "key" : "value" }
确保在定义路线之前定义app.use(body)
来电。