Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/469.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AJAX post在集合中创建一个新条目,但不发送实际数据_Javascript_Ajax_Mongodb - Fatal编程技术网

Javascript AJAX post在集合中创建一个新条目,但不发送实际数据

Javascript AJAX post在集合中创建一个新条目,但不发送实际数据,javascript,ajax,mongodb,Javascript,Ajax,Mongodb,以下是我根据console.log(有效负载)获得的数据示例: 对象{title:“test post”,消息:“some message”,图像:“cat.jpg”} 然而,这就是我的mongo系列中显示的内容: { "_id": "5684609f8d6ff91e159cef6d", "created_at": "2015-12-30T22:54:23.266Z", "updated_at": "2015-12-30T22:54:23.266Z", "__v"

以下是我根据
console.log(有效负载)
获得的数据示例:

对象{title:“test post”,消息:“some message”,图像:“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

您可以从中使用序列化函数

更新:

正如我看到的,您没有将POST数据解析器中间件添加到路由器中,因此您的
req.body
未定义。对于
内容类型:application/x-www-form-urlencoded
您应该使用
正文解析器
模块

您可以使用
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:

或者,您可以使用
内容类型: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);
尝试以下代码

var request = new XMLHttpRequest();

xhttp.onreadystatechange = function() {
    if (request.readyState == 4 && request.status == 200) {
        console.log("success : " + request.responseText);
    } else {
        //This would print if something goes wrong along with the error message
        console.log("other status : " + request.status + " : " + request.responseText);
    }
};

request.open('POST', 'http://localhost:3000/api/v1/posts', true);
request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
//We need to serialize payload before sending it
request.send(JSON.stringify(payload));
您可以使用开发者工具下的Chrome网络选项卡来监视发送的网络请求。在那里,您将能够看到是否发送了请求主体,或者是否按照设置发送了头,以及响应是什么

请参见下面的图片


非常感谢。下一步我要试试这个方法。我有很多东西要学。。。感谢您,sirI已经添加了application/json解决方案,以防您不想在客户端使用其他功能。