簡體   English   中英

如何在URL Angular / REST API中傳遞多個參數

[英]How to pass multiple parameters in a URL Angular/REST API

我正在嘗試在網址中傳遞多個參數而沒有運氣。 我不確定是否會有所作為,但我是通過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

我已經嘗試過使用正斜杠,半冒號對它進行編碼和不編碼,但是到目前為止沒有任何效果。 我不知道為什么在開始時會附加一個本地主機,但是即使在沒有第一個本地主機的郵遞員中嘗試它也仍然是404錯誤。

我應該怎么做? 任何幫助表示贊賞。 謝謝。

首先,除了將工作分成工廠之外,您實際上並沒有在這里使用Angular。 其次,我將考慮發布到您的API,從API返回JSON結果,然后使用Promise將數據讀回到Angular。

  1. 使用$ http.post

讓Angular為您完成這項工作。 如下所示的內容將為您生成URL請求。 $ http的返回值也是一個保證 ,因此使用.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. 考慮身體分析器

我知道您說過您對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);
});

希望能有所幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM