2016-06-07 82 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" 
    } 
}