2015-04-06 243 views
0

我是Node.js上的新手。我想在這裏做的是發送一些json格式的數據,從客戶端javascript到express.js服務器。一旦我可以做到這一點,我將使用已發送到服務器的參數來進一步從MongoDB中檢索信息。客戶端代碼非常簡單,一個點擊事件:JQuery Ajax Post無法發送數據(json)到express.js服務器

$.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」}。以下是觸發點擊事件時服務器端控制檯的輸出:

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

任何人對此有什麼想法?這是與跨域問題有關嗎?非常感謝你!

+1

幾乎沒有足夠的信息串

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

是一個適當的問題。建議學習一些ajax教程,然後提供更具體的代碼相關問題 – charlietfl

+0

無法使用jsonp數據類型進行POST。 –

回答

0
  1. 您正在發送jsonp作爲您的dataType。我猜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); 
    }); 
    
0

首先是發送數據的JSON而不是在服務器這給

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

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

感謝您的回答。但是,如果我將url格式設置爲'/ 1',則會收到錯誤消息「無法加載資源:服務器響應的狀態爲404(未找到)」。我在想,如果這是因爲我的Windows PC上沒有安裝真正的Web服務器,並且Google Chrome會通過此URL將我導向到本地文件位置。如果我在「/ 1」之前添加「localhost:8020」,則會出現跨域問題。任何想法呢?謝謝。 – YoungYoungYoung

相關問題