我试图在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>
答案 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));
}
}));