为什么我不能用Angular显示来自Mongodb的数据

时间:2015-03-07 21:12:59

标签: angularjs mongodb

我试图在mongodb中显示一个名为books的集合,但由于某种原因,我遇到了ng-repeat欺骗错误。此外,从$http.get操作检索的数据由于某种原因返回整个页面的HTML语法,而不是从books集合中访问数据。事情是我在此之前创建了其他程序,我对ng-repeat完全没有问题并且它们仍然有效,不同之处在于角度版本较旧。我在想这就是问题所在。如果您对我做错了什么有任何见解,我将不胜感激。谢谢

错误:

  

错误:[ngRepeat:dupes]   http://errors.angularjs.org/1.3.14/ngRepeat/dupes?p0=book%20in%20library&p1=string%3A%3C&p2=%3C

控制器代码:

    var app = angular.module("myApp", []);
    app.controller("bookCtrl", function($scope, $http) {
    var refresh=function(){
     $http.get('http://localhost:3000/storeHome').success(function(response){
     console.log("I got the data I requested");
     console.log(response); //returns HTML of the page instead of an object
     $scope.library = response;
     $scope.book="";
     });
   };
   refresh();
   });

路线代码:

     var express = require('express');
     var router = express.Router();
     var Book =require('../../models/book');

     router.get('/', function(req, res) {
     res.render('bookStore/storeHome');
     });

     //get all books from the database
     router.get('/',function(req,res,next){
     Book.find(function(err, books) {
     if (err)
     res.send(err);
     console.log(books);
     res.json(books);
     });
     });

书籍型号:

    var mongoose = require('mongoose');
    var BookSchema = new mongoose.Schema({
       title: String,
       author: String,
       publisher: String,
       year: Number
     });
     module.exports=mongoose.model('Book', BookSchema);

HTML

   <div class="container" ng-app="myApp" ng-controller="bookCtrl">  
   <table class="table">
    <!--omitted code in between -->
   <tr ng-repeat="book in library"> <!-- I tried track by $index and it didn't work-->   
   <td>{{book.title}} </td>
  </tr>
  </div>

3 个答案:

答案 0 :(得分:0)

我认为nodejs的响应是错误的。 res.json ...请尝试另一种选择。

编辑:喜欢这个:res.status(200).send({myBooksList:list})

或者:res.send(200,{myBooksList:list})

我还是不确定:D,抱歉。

答案 1 :(得分:0)

将您的模板&ng-wt-repeat更改为:

<tr ng-repeat="book in library track by $index">

它没有很好地处理重复数据,因为它试图找到每个项目唯一的标识符。但由于数据中的重复项无法实现...我们可以使用指定的重复索引来跟踪项目。

答案 2 :(得分:0)

这可能有效:

Book.find(function(err, books) {
  if (err)
    res.send(err);
    res.end(JSON.stringify(books));
  }
}));