我试图找到与我的id参数匹配的商店。在终端一切都很好看:
GET /admin/company?_id=5470e913d20b3dab7c13218b 200 219.590 ms - -
然后是我的资源
angular.module('mean.management').factory('Companies', ['$resource',
function($resource) {
return $resource('/admin/company/:companyId', {
companyId: '@_id'
}, {
update: {
method: 'PUT'
},
get: {method: 'GET',isArray: true}
});
}
]);
使用正确的_id进行搜索,但它会返回一组公司的列表,而不仅仅是一家公司。
这是控制器
$scope.newStore = function () {
Companies.get({
_id: $scope.global.user.company // _id works fine
}, function (company2) {
console.log(company2); // this logs 40 different companies when it should be one matching the _id
});
};
如果我用Companies.query替换Companies.get,那就是同样的问题。没有改变任何事情。我还更改了get:{方法:' GET',isArray:false}而不是true,这只是在浏览器控制台中返回错误(因为它是一个数组)。
更新:我知道参数是正确的,因为如果我去localhost:3000 / admin / company?_id = 5470e913d20b3dab7c13218b和ctrl + f 5470e913d20b3dab7c13218b我可以在其中看到带有_id的对象。
Update2:我想我越来越接近解决方案了。如果我注释掉它,它不会返回任何文章
// routes
app.get('/admin/company', companies.all); // if I comment this, it won't return anything
app.get('/admin/company/:companyId', companies.oneCompany); // this doesn't seem to be doing anything
UPDATE3 以下是服务器端代码的一些示例
exports.oneCompany = function(req, res, next, id) {
Company.load(id, function(err, article) {
if (err) return next(err);
if (!article) return next(new Error('Failed to load article ' + id));
req.article = article;
res.json(req.article);
next();
});
};
这是我试过的另一个
exports.company1 = function (req, res, next, id) {
Company
.findOne({
_id: id
})
.exec(function (err, user) {
if (err) return next(err);
if (!user) return next(new Error('Failed to load User ' + id));
req.profile = user;
res.json(user);
next();
});
};
答案 0 :(得分:2)
我对自己的资源非常陌生,并在上周发现了类似的事情。这里的问题是资源定义,您可以在其中生成companyId到URL路径,但在定义资源时不作为参数:
return $resource('/admin/company/:companyId', {
companyId: '@_id'
},
你需要的只是这个:
return $resource('/admin/company')
并将此$资源用作
app.get({_id:companies.oneCompany});
这会生成资源URL为/ admin / company?_id = XYZ。此部分在https://docs.angularjs.org/api/ngResource/service/ $ resource中记录为paramDefaults:
参数对象中的每个键值首先绑定到url模板 如果存在,则将任何多余的键附加到URL搜索 查询之后?。
给定模板/路径/:动词和参数{动词:'问候', 称呼:'Hello'}导致URL / path / greet?salutation = Hello。
希望这有帮助。