MEAN堆栈应用程序未从MongoDB检索数据

时间:2019-03-07 00:16:25

标签: node.js angularjs mongodb express mongoose

我刚开始使用MEAN堆栈应用程序,并且正在使用一个预先存在的MEAN堆栈应用程序,该应用程序用于从mongoDB数据库中提取信息并将其以表格形式发布后,在页面上显示一些信息。该信息仍然存在于数据库中,但是在此行的某个地方,代码停止在页面上显示数据。现在,我在npm日志中收到以下错误:“ CastError:在路径” _id“上对值”“强制转换为ObjectId失败。我很难弄清楚出了什么问题。我什至尝试将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;
}

1 个答案:

答案 0 :(得分:0)

错误消息“ CastError:在路径“ _id”处,值“”的强制转换为ObjectId失败来自于mongoDB函数findById()。此函数期望ObjectId作为第一个参数,但在您的情况下,它为空字符串,因此会引发错误。

在角度控制器中,调用serviceA.get()时不会将ownerRequestId作为参数传递。