如何在URL Angular / REST API中传递多个参数

时间:2015-02-12 18:39:03

标签: angularjs rest express http-get

我试图在网址中传递多个参数而没有运气。我不确定它是否有所作为,但我是通过Angular进行的。我试图将请求发送到我知道可用于单个请求的REST API后端。这是我的后端的样子

index.js

var express = require('express');
var router = express.Router();
var game = require('./game');
router.get('/api/v1/gameRefined/:from_datepicker:to_datepicker:from_timepicker:to_timepicker:selectLevel', game.getAllRefined);
module.exports = router;

game.js

...dbconnection stuff...
var game={
getAllRefined: function(req, res) {
    var refines = req.params;
    console.log("getting refined games");
    pool.getConnection(function(err, connection){
    var query = connection.query('SELECT * FROM game WHERE date >= ? AND date <= ? AND time >= ? AND time <= ? and level = ?', [refines.from_datepicker, refines.to_datepicker, refines.from_timepicker, refines.to_timepicker, refines.selectLevel], function(err, rows) {
      connection.release();
if(err) {
  throw err;
}else{
  res.json(rows);
    }
  });
})
  },
}
module.exports = game;

我从这家工厂发送请求

.factory('gameFactory', ['$http',
function($http) {
var _gameFactory = {};
_gameFactory.getRefinedGames = function(dateFrom,dateTo,timeFrom,timeTo,level) {
  var encodedParam = encodeURIComponent(baseUrl + '/api/v1/gameRefined/?from_datepicker='+dateFrom+'&to_datepicker='+dateTo+'&from_timepicker='+timeFrom+'&to_timepicker='+timeTo+'&selectLevel='+level+'');
  return $http.get(encodedParam);
}

return _gameFactory;
}])

发送此请求作为404发回: http://localhost:8100/http%3A%2F%2Flocalhost%3A3000%2Fapi%2Fv1%2FgameRefined%2F%3Ffrom_datepicker%3D2015-02-05%26to_datepicker%3D2015-02-19%26from_timepicker%3D12%3A00%26to_timepicker%3D18%3A00%26selectLevel%3D1

我已经尝试过编码而不是编码,使用正斜杠,使用半冒号,但到目前为止还没有任何工作。 我不知道为什么本地主机会在开始时附加,但即使在没有第一个localhost的邮递员中尝试它仍然是404错误。

我该怎么做?任何帮助表示赞赏。谢谢。

1 个答案:

答案 0 :(得分:1)

首先,除了将作品分成工厂之外,你在这里并没有真正使用Angular。其次,我会考虑发布到您的API,从API返回JSON结果,然后使用promise将数据读回Angular。

  1. 使用$http.post
  2. 让Angular为您工作。类似下面的内容将为您生成URL请求。 $ http的返回值也是promise,所以使用.success和.error也可以解析任何返回的数据,即使它只是成功或失败的消息 - 但它是一个很好的方法在服务器/ API和客户端之间传递数据。

    .factory('gameFactory', ['$http',
      function($http) {
        return {
          reachAPI: function(dateFrom, dateTo) {
            $http.post('http://localhost:8080/api/v1', {
              'dateFrom': dateFrom,
              'dateTo': dateTo
            })
            .success(function(data, status, headers, config) {
              *things happen*
              data.somethingReturned // from your API
              });
            }
    }]);
    
    1. 考虑body-parser
    2. 我知道你说你对你的REST API结构很有信心,但是body-parser是一个Express中间件,它可以解析URL编码的字符串,并且可能有助于读取你的数据。就个人而言,我认为它可以提供更易读的代码。

      var app = express();
      app.use(bodyParser.urlencoded({ extended: true }));
      app.use(bodyParser.json());
      router.route('/api').post(function(req, res) {
        *things happen*
        req.body.dateFrom //find your data
        *things happen*
        res.json(returnedData);
      });
      

      希望有所帮助