【发布时间】:2019-07-28 18:32:52
【问题描述】:
我对 MEAN 堆栈应用程序的工作相当陌生,并且正在研究一个预先存在的 MEAN 堆栈应用程序,该应用程序用于在从 mongoDB 数据库中提取信息并以表格形式发布后在页面上显示一些信息。信息仍然存在于数据库中,但在某处,代码停止在页面上显示数据。现在,我的 npm 日志中出现以下错误:“CastError: Cast to ObjectId failed for value "" at path "_id"。我很难弄清楚出了什么问题。我什至尝试将 ngResources 包含为下面的 serviceA.js 代码中的一个依赖项,但没有任何区别。
为了澄清,这个问题试图确定为什么一段特定的代码不起作用。上一个具有类似错误的问题讨论了如何将字符串转换为 objectID。这不是这里的问题。我正在努力解决的是如何完全从 MongoDB 中获取相关数据。似乎没有执行正确的查询,我正在尝试找出原因。
感谢一些帮助。这是我的代码:
Html 代码(来自文件 codeA.html):
<tr ng-repeat="x in allX | offset: offsetValue | limitTo: itemsPerPage track by x._id">
对应的控制器代码(来自aController.js):
aController.controller('aCtrl', ['$scope','$http', '$state', 'serviceA', function($scope, $http, $state, serviceA, $rootScope) {
if ($state.current.name == 'codeA') {
$scope.reqLoadingHash = {};
var docs = ['doc_a', 'doc_b', 'doc_c'];
serviceA.get({}, function (response) {
$scope.allX = response.searchResult;
angular.forEach($scope.allX, function(val, key) {
var numDocs = 0;
docs.forEach(function(prop) {
if (val[prop]) {
numDocs++;
}
});
$scope.allX[key].numDocs = numDocs;
});
$scope.range();
});
}
}])
服务代码:
(function() {
'use strict';
angular.module('routerApp')
.factory('serviceA', serviceA);
serviceA.$inject = ['$resource'];
function serviceA($resource) {
return $resource('/api/requestA/:ownerRequestId', {}, {
getRequest: {
method: 'GET',
url: '/api/requestA/user/:userId/listing/:listingId'
},
update: {
method: 'PUT'
},
delete: {
method: 'DELETE'
}
});
}
})();
路由器代码:
var Router = require("express").Router;
module.exports = function () {
var router = new Router();
router.route('/requestA/:ownerRequestId').get(function(req, res, next) {
ownerRequest.findById(req.params.ownerRequestId)
.populate('listing owner')
.exec(function(err, ownerRequest) {
if (err) {
return next(err);
}
res.json({searchResult: ownerRequest});
});
});
return router;
}
【问题讨论】:
-
“链接副本”是您报告的错误和问题的“完全匹配”。您正在以
req.params.ownerRequestId提交数据,这不是有效的 ObjectId 格式,这就是您收到确切消息的原因。了解这一点并确保您发送有效格式,或相应地更改您的猫鼬模式,因此_id不是默认的ObjectId类型。您自己的文字:Now, I get the following error in my npm log: "CastError: Cast to ObjectId failed for value "" at path "_id".
标签: node.js angularjs mongodb express mongoose