JQuery Ajax Post无法将数据(json)发送到express.js服务器

时间:2015-04-06 23:25:39

标签: jquery ajax node.js mongodb jsonp

我是Node.js的新手。我想要做的是以json格式发送一些数据,从客户端javascript到express.js服务器。一旦我能做到这一点,我将使用已发送到服务器的那些参数来进一步从MongoDB检索信息。客户端代码非常简单,只有一个点击事件:

 $.ajax({
                url: 'http://localhost:8020/1',
                type: 'post',
                dataType: 'jsonp',
                data: JSON.stringify({name: "test"}),
                contentType: 'application/json',
                success: function(data){
                alert("success");
                alert(data);
            }
    });

在服务器端,代码如下所示:

    var express = require('express');
    var app = express();
    var cons = require('consolidate'),
        MongoClient = require('mongodb').MongoClient,
        Server = require('mongodb').Server; 

    var mongoclient = new MongoClient (new Server('localhost', 27017,
                            {'native_parser' : true}));
    var db=mongoclient.db('test');

    var bodyParser = require('body-parser');

    app.use(bodyParser.json());
    app.use(bodyParser.urlencoded({extended: true}));


    app.all('/*', function(req, res, next) {
      res.header("Access-Control-Allow-Origin", "*");
      res.header("Access-Control-Allow-Headers", "X-Requested-With");
      next();
     });

    app.get('/1', function (req, res) {
        db.collection('test').findOne({}, function (err, doc){
           console.log(doc);
        });
        console.log(JSON.stringify(req.body));
        var x = req.body.name;
        console.log(x);
        res.send({});
    });


    app.post('/1', function (req, res){

           db.collection('test').findOne({}, function (err, doc){
               console.log(doc);
            });

           console.log(req.body);
    });

    mongoclient.open(function (err, mongoclient) {

        if (err) throw err;
        app.listen(8020);
        console.log("listening on port 8020");
    });

当我进行客户端ajax调用时,似乎服务器端代码成功返回了我的mongoDB数据库中的一个项目,但它无法捕获数据,这是{name:" test" } 在这种情况下。下面是触发click事件时服务器端控制台的输出:

{}
undefined
{ _id: 5522f3368d21ba45c6263402, apple: 'juice' }

有人对此有任何想法吗?这是否与跨域问题有关?非常感谢你!

2 个答案:

答案 0 :(得分:0)

  1. 您正在发送jsonp作为您的数据类型。我猜jQuery会为你创建一个jsonp请求。你确定需要这样做吗?

  2. 您未在POST路线回复。这将使请求无限期挂起。你必须回复:

    app.post('/1', function (req, res){
    
           db.collection('test').findOne({}, function (err, doc){
               console.log(doc);
               res.send(doc); // respond!
           });
    
           console.log(req.body);
    });
    

答案 1 :(得分:0)

首先将数据作为JSON发送而不是字符串

 $.ajax({
            url: '/1',
            type: 'post',
            dataType: 'json',
            data: {name: "test"},
            contentType: 'application/json',
            success: function(data){
               alert("success");
               alert(data);
        }
});
服务器上的

app.post('/1', function(req, res) {
  var body = req.body;

  console.log(body)
  res.send(body)
});