Angular-Fullstack:使用$ resourse查询与params

时间:2017-07-21 18:51:08

标签: javascript angularjs yeoman angular-fullstack

我正在使用Angular-Fullstack生成器,并且我无法通过$ resource查询获取取决于companyID的驱动程序列表。这就是我所拥有的:

服务器/ API /驱动器/ index.js:

router.get('/:company', controller.index);

服务器/ API /驱动器/ driver.controller.js:

export function index(req, res) {
  return Driver.find({company: req.params.company}).exec()
    .then(function(res){
       console.log(res); /* I get here the result correctly */
       respondWithResult(res)
    })
    .catch(handleError(res));
}

的客户端/服务/ driver.service.js:

export function DriverResource($resource) {
  'ngInject';

  return $resource('/api/drivers/:id/:company', {company: '@_id'});
}

客户端/应用程序/驱动程序/ driver.controller.js:

this.driverList = Driver.query({company: Auth.getCurrentUser()._id}});
console.log(this.driverList); /* Empty array */

如果有人能帮助我从服务器获得响应,我将不胜感激......

提前谢谢。

2 个答案:

答案 0 :(得分:1)

我刚刚意识到我正在复制“' res'变量:

服务器/ API /驱动器/ driver.controller.js:

export function index(req, res) {
  return Driver.find({company: req.params.company}).exec()
    .then(function(**res**){
       /* Should be the result, not the response */
       console.log(**res**);
       respondWithResult(**res**)
    })
    .catch(handleError(res));
}

答案 1 :(得分:0)

你很亲密。

Driver.query({company: 'foo'}).$promise.then(function(results) {
  console.log(results) //here
}, function(err) {
  //here is your 404 error, but you should create an http interceptor
});

它是异步的,你不能马上得到你的结果。 当然,假设您的后端正确响应,这将有效。

编辑:你的后端缺少一些端点。您应该能够使用驱动程序列表回复/api/drivers/的请求

编辑2:

Angular的资源将为您提供访问某些方法的权限:

Driver.get(1)将向/ api / drivers /:id发出请求,并期望后端响应代表具有所述ID的驱动程序的对象。当您只想获取1条记录

时,应该使用此选项

Driver.query({foo:' bar',some_id:1})会向/ api / drivers发出请求?foo = bar& some_id = 1并且会期待后端响应一组对象,每个对象代表一个驱动程序。当您想要获取多个记录时,例如在索引中,应该使用此方法。

Driver.query()会向/ api / drivers发出请求,并期望后端响应数组

Driver.create(data)将向/ api / drivers发出POST请求,并期望响应中有一个对象(创建的驱动程序)。用于创建新记录

还有其他一些,这是我使用的。

因此,考虑到您正在使用这三种方法,您的后端需要处理:

router.get('/drivers/:id', function(req, res) {
  let id = req.params.id
})

router.get('/drivers', function(req, res) {
  //if request was /drivers?foo=bar
  let foo = req.query.foo 
})

router.post('/drivers', function(req, res) {
  let body = req.body
})

正如我所说,这里有几件事情在起作用。如果你处于迷失状态,请将问题分解成碎片。在前往Angular之前让后端工作。