0

[問題は解決しました...答えはとてつもなく単純でした...

$scope.article = articleFactory.getArticles().get({id:parseInt($stateParams.id,10)}) .$promise.then(

読むべきだった:

$scope.article = articleFactory.getArticles().get({
        id: $stateParams.id
    })

私は実際にこれを試しましたが、何らかの理由で Chrome が古いコードをキャッシュしていました - 履歴をクリアし、すべてが良好でした。

大きな「ド」。

]

サイトを json-server から express / mongo / mongoose に移動する際に問題が発生しています。json ではすべて正常に動作していますが、express / mongo / mongoose に移動すると、次のエラーが発生する問題があるようです。

CastError: Cast to ObjectId failed for value "NaN" at path "_id" 

そして、サーバーがクラッシュします...

ルートを変更することでクラッシュを止めることができます。以前は、次のとおりでした。

articleRouter.route('/:articleId')
.get(function (req, res, next) {
    Articles.findById(req.params.articleId, function (err, article) {
        if (err) throw err;
        res.json(article);
    });

})

ただし、if ステートメントを追加して NaN を除外すると、サーバーが実行されます。

articleRouter.route('/:articleId')
.get(function (req, res, next) {

if (id.match(/^[0-9a-fA-F]{24}$/)) {
        Articles.findById(req.params.articleId, function (err, article) {
        if (err) throw err;
        res.json(article);
    });
}
})

ただし、ID が渡される「詳細ページ」は表示されません。これはマングーススキーマ内の型と関係があるのではないかと強く疑っていますが、私はこれにかなり慣れておらず、少し迷っています。

スキーマは次のとおりです-idフィールドの有無にかかわらず試しました:

var articleSchema = new Schema({
    _id: {
         type: String,
         required: true,
         unique: true,
         index: true
    },
    headline: {
        type: String,
        required: true,
        unique: false
    }
---blah blah etc---
}

関連するコードと関連しないコードを以下に示しましたが、これが Mongoose のものであることは 95% です。何か案は?

前もってありがとうステフ

関連するマークアップは次のとおりです: (「news.html」内)

<div ng-controller="ArticleController">
<div><a ui-sref="app.newsdetail({id: article.id})">See details</a></div>
</div>

マークアップ : ("newsdetail.html" 内)

<div ng-controller="ArticleDetailController">
{{article.headline}}
{{article.text}}
</div>

コントローラーは次のとおりです。

.controller('ArticleController', ['$scope', '$stateParams', 'articleFactory', function ($scope, $stateParams, articleFactory) {
'use strict';
  articleFactory.getArticles().query(
      function(response) {
          $scope.articles = response;
      },
      function(response) {
          $scope.message = "Error: "+response.status + " " + response.statusText;
      }
  );
}])

.controller('ArticleDetailController', ['$scope', '$stateParams', 'articleFactory', function ($scope, $stateParams, articleFactory) {
    $scope.article = {};

    $scope.article = articleFactory.getArticles().get({id:parseInt($stateParams.id,10)})
        .$promise.then(
            function(response){
                $scope.article = response;
                $scope.showArticle = true;
            },
            function(response) {
                $scope.message = "Error: "+response.status + " " + response.statusText;
            }
    );        
}])

サービスは次のとおりです。

.service('articleFactory', ['$resource', 'baseURL',      function($resource,baseURL) {
'use strict';
    this.getArticles = function(){ 
        return $resource(baseURL+"articles/:id",null,{'get':{method:'GET' }}); 
    }; 
}]) 
4

1 に答える 1