为什么不能安静的传递正文到数据库中

我正在创build一个RESTful API。

我想使用GET方法来检查lastName存在。 如果可以findlastName,则返回“YES”,否则,调用POST方法创build一个inputlastName的数据。

问题是它可以创build一个新的数据,但是它的主体是空的。 理想情况下,它应该包含lastName的值,如"lastName": "James",

 { "_id": "58a22c3c3f07b1fc455333a5", "__v": 0 } 

这是我的代码。

 router.route("/findLastName/:id") .get(function(req,res){ var response; mongoOp.findOne({deviceID: req.params.id}, function(err, result){ if (err) { response = {"error" : true,"message" : "Error fetching data"}; res.json(response); } if (result) { response = "YES"; res.send(response); } else { var XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest; var xhr = new XMLHttpRequest(); var POSTurl = "http://localhost:6002/users"; var params = "lastName=" + req.params.id; xhr.open("POST", POSTurl, true); xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); xhr.send(params); } }); }) 

PS: GET方法运作良好,不是一个问题。

让我修改一下你的代码,并添加注释作为指针:

 // changed findLastName to find-last-name. It's a common convention, // urls need to be case insensitive. It doesn't concern lastName, as // that's a parameter, internal to your app so it's fine. // even better if you name the route `find-or-create` or something, to better // reflect what you're doing. router.route("/find-last-name/:lastName") .get(function(req,res){ var response; mongoOp.findOne({deviceID: req.params.lastName}, function(err, result){ if (err) { response = {"error" : true,"message" : "Error fetching data"}; // Adding a `return statement here. If you don't return, you'll tell // the user that there was an error, but your code continues running // potentially calling that res.json twice. // Also, since it's an internal error, it's common to tell the client // about it, by setting the status to 500 return res.status(500).json(response); } if (result) { // turning the message to JSON instead. You started that above, // and for the sake of your clients (your frontend), it's // better to stick to JSON. Also you can pass useful info, such as // _id of the document. // Again adding a `return` here, and then the rest of the code // is nested one level less. not required, but some people like that. response = { message: "Last name exists." }; return res.json(response); } // Here begins the new code. I'm typing what I can infer from your code, // I don't know if your MongoDB driver looks like that exactly. mongoOp.insert({ deviceId: req.params.lastName // add other optional properties here. }, function (err, response) { if (err) { var message = { error: true, message: 'Cannot save new entry.' } return res.status(500).json(message); } // if we're here, everything went ok. You can probably return // the _id of the given user. return res.json({ message: 'New user created.', _id: response._id }); }); }); })