2016-06-07 84 views
1

我有使用$ http.get發送數據的req.body問題。當我在routes.js方法中從GET更改爲POST時,以及將我的服務更改爲$ http.post時,一切正常,但使用GET,我無法將任何數據發送到節點中的服務器。任何人有任何想法?

server.js

// modules ================================================= 
var express  = require('express'); 
var app   = express(); 
var mongoose  = require('mongoose'); 
var bodyParser  = require('body-parser'); 
var methodOverride = require('method-override'); 
var path = require('path'); 

// configuration =========================================== 


var db = require('./config/db'); 

var port = process.env.PORT || 8080; 
mongoose.connect(db.url); 
app.use(express.static(__dirname + '/public')); 


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



// routes ================================================== 
require('./app/routes')(app,__dirname); 

// start app =============================================== 
app.listen(port); 
console.log('Magic happens on port ' + port); 
exports = module.exports = app; 

./app/routes.js

module.exports = function(app, __dirname) { 

    var Card  = require('./models/card'); 

    app.post('/create', function(req, res) { 
     var card = new Card(); 

     card.polishWord = req.body.polishWord; 
     card.polishDescription = req.body.polishDescription; 
     card.englishWord = req.body.englishWord; 
     card.englishDescription = req.body.englishDescription; 
     card.category = req.body.category; 

     card.save(function(err){ 
      if(err){ 
       res.send(err); 
      } 
      res.json({message: 'Card created'}); 
     }); 
    }); 

    app.get('/take', function(req, res) { 
     var condition = req.body.condition || {}; 
     console.log(req.headers); 
     console.log('______________'); 
     console.log(req.body); 
     console.log('______________'); 
     /*TODO :: Czemu nie odbiera parametrow GET*/ 
     Card.find(condition,function(err, cards) { 
      if (err) 
       res.send(err); 

      res.json(cards); 
     }); 
    }); 



    app.get('*', function(req, res) { 
     res.sendFile('/public/index.html',{"root": __dirname}); 
    }); 
}; 

./public/js/services/CardService(部分)

cardService.getAllCards = function(){ 
    return $http.get('/take',{params: {condition:{"category":"animal"}},data: {condition:{"category":"animal"}}}); 
}; 

req.headers

{ host: 'localhost:8080', 
    connection: 'keep-alive', 
    accept: 'application/json, text/plain, */*', 
    'user-agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, 
like Gecko) Chrome/50.0.2661.102 Safari/537.36', 
    referer: 'http://localhost:8080/card', 
    'accept-encoding': 'gzip, deflate, sdch', 
    'accept-language': 'pl-PL,pl;q=0.8,en-US;q=0.6,en;q=0.4', 
    cookie: '_ga=GA1.1.1073910751.1465203314' } 

.package.json(依賴)

"dependencies": { 
    "express": "~4.13.1", 
    "mongoose": "4.4.20", 
    "body-parser": "~1.15.1", 
    "method-override": "~2.0.2" 
    }, 

任何人有一個想法?

+0

當你想使用GET方法,req.params將有助於你得到的參數。當我們使用POST方法時,使用req.body。 –

+0

你可以請使用參數,並試試它應該工作。 –

+0

我用5分鐘前req.params,和相同的結果。 :( – Samot

回答

1

req.body未定義,因爲您從$http.get('/take')發出'GET'請求。你發送給服務器的是query parameters。的查詢參數的一個例子是:

http://stackoverflow.com/questions/tagged/npm?filter=all&sort=active

其中filtersort是查詢參數與值分別'all''active'

要訪問Express服務器中的查詢參數,您需要使用req.query對象。它包含查詢參數及其相應的值。該req.query對象請求'/take'應該是這樣的:

{ 
    condition: { 
    category: "animal" 
    } 
}