根据console.log(payload)
,这是我的数据示例:
Object {title: "test post", message: "some message", image: "cat.jpg"}
但是,这是出现在我的 mongo 集合中的内容:
{
"_id": "5684609f8d6ff91e159cef6d",
"created_at": "2015-12-30T22:54:23.266Z",
"updated_at": "2015-12-30T22:54:23.266Z",
"__v": 0
}
代码如下:
console.log(payload); // what this returns is posted above!
var request = new XMLHttpRequest();
request.open('POST', 'http://localhost:3000/api/v1/posts', true);
request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
request.send(payload);
有人可以帮助我吗?
这是来自 server.js 的相关代码:
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/fluxible-posts');
var Post = require('./database/postModel');
// routes
var router = express.Router();
server.use('/api/v1/', router);
router.use(function(req, res, next) {
// do logging
console.log('Something is happening.');
next(); // make sure we go to the next routes and don't stop here
});
// test route
router.get('/', function(req, res) {
res.json({ message: 'hooray! welcome to our api!' });
});
router.route('/posts')
.post(function(req,res) {
var post = new Post();
post.title = req.body.title;
post.message = req.body.message;
post.image = req.body.image;
post.save(function(err) {
if(err) {
res.send(err);
}
res.json({ message : 'New post created' });
});
})
.get(function(req, res) {
Post.find(function(err, posts) {
if (err)
res.send(err);
res.json(posts);
});
});
router.route('/posts/:post_id')
// get the post with that id
.get(function(req, res) {
Post.findById(req.params.post_id, function(err, post) {
if (err)
res.send(err);
res.json(post);
});
})
// update the post with this id
.put(function(req, res) {
Post.findById(req.params.post_id, function(err, post) {
if (err)
res.send(err);
post.name = req.body.name;
post.save(function(err) {
if (err)
res.send(err);
res.json({ message: 'Post updated!' });
});
});
})
// delete the post with this id
.delete(function(req, res) {
Post.remove({
_id: req.params.post_id
}, function(err, post) {
if (err)
res.send(err);
res.json({ message: 'Successfully deleted' });
});
});
最佳答案
如果你添加 request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
你应该发送有效载荷而不是在对象中,而是作为 POST 数据像
title=test%20post&message=some%20message&image=cat.jpg
您可以使用 Query-string encoding of a Javascript Object 中的序列化函数
更新:
正如我所见,您没有将 POST 数据解析器中间件添加到您的路由器,因此您的 req.body
未定义。对于 Content-Type: application/x-www-form-urlencoded
你应该使用 body-parser
模块。
您可以使用 npm install body-parser
安装它,并将您的服务器代码更改为
var bodyParser = require('body-parser');
var router = express.Router();
router.use(bodyParser.urlencoded({ extended: true }));
server.use('/api/v1/', router);
我的评论的第一部分仍然有效。
更新 2:
或者,您可以使用 Content-type: application/json
。在这种情况下,您需要更新您的客户端代码,如下所示:
var payload = {test: "data"}
var request = new XMLHttpRequest();
request.open('POST', 'http://localhost:3005/api/v1/posts', true);
request.setRequestHeader('Content-Type', 'application/json');
request.send(JSON.stringify(payload));
和服务器端:
var bodyParser = require('body-parser');
var router = express.Router();
router.use(bodyParser.json());
server.use('/api/v1/', router);
关于javascript - AJAX post 在集合中创建一个新条目,但不发送实际数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34538568/