在Cloudant DBsearchAPI中使用angularjs和node.js后端

我正在尝试使用searchAPI从我的node.js后端search我的云数据库,然后显示网页上返回的内容。

我正在使用一个angular度MVC,我有点新,所以很抱歉,如果这有点简单。

我有一个包含这个HTML的前端 –

<button class="btn btn-default" ng-click="getDataandHeadings()"></button> <table> <tr ng-repeat="doc in myData"> <td>{{doc.doc.TerritoryTypeName}}</td> <td>{{doc.doc.TeamOwnerSerialNo}}</td> <td>{{doc.doc.TeamOwnerName}}</td> <td>{{doc.doc.TeamOwnerNotesID}}</td> <td>{{doc.doc.SellerSerialNo}}</td> <td>{{doc.doc.SellerName}}</td> <td>{{doc.doc.SellerNotesID}}</td> </tr> </table> 

控制器 –

 'use strict'; var app = angular.module('app', false); app.controller('greetingscontroller', function($scope, $http) { $scope.getDataandHeadings = function() { $http.get('/retrieve').success(function(data) { $scope.myData = data; }).error(function(err) { //handle the error }); }; }); 

后端节点应用程序 –

 var express = require('express'); var secrets = require('./secrets.js'); var Cloudant = require('cloudant'); var csv = require('csv-parser'); var fs = require('fs'); var cloudant = Cloudant({account: secrets.cloudantUser, password:secrets.cloudantPassword}); var cfenv = require('cfenv'); var app = express(); app.use(express.static(__dirname + '/public')); var arr = []; var headings = []; var bufferString; var i; var db = cloudant.db.use('my_sample_db'); app.get('/retrieve', function(req, res) { var db = cloudant.db.use('my_sample_db'); // db.get('_all_docs', {include_docs: true}, function(err, body) { // if(!err) { // console.log(body.rows.length +' '+body.total_rows); // for (var i = 0; i < body.rows.length; i++) { // console.log('Document id: %s', body.rows[i].id); // } // // res.status(200).json(body.rows); // } // if(err) { // console.log(err); // } // }); db.search('app', 'mySearch', {q:'TerritoryTypeName:NHS'}, function(err, body) { console.log(body.rows.length +' '+body.total_rows); for (var i = 0; i < body.rows.length; i++) { console.log('Document id: %s', body.rows[i].id); } res.status(200).json(body.rows); if (err) { console.log(err); } }); }); var appEnv = cfenv.getAppEnv(); app.listen(appEnv.port, '0.0.0.0', function() { console.log("server starting on " + appEnv.url); }); 

正如你所看到的,在我的后端,我正在对DB进行2个类似的API调用 – db.get和db.search – (其中一个被注释掉了)。 被注释掉的那个只是返回数据库中的所有内容,而第二个使用我的键:值对 – TerritoryTypeName:NHS进行查询。

注释掉的电话是如何工作的,当我点击前端的button时,DB中的数据就会显示出来。

另一个API调用似乎不工作,因为当我点击时没有任何东西显示在前端。 我不明白为什么其中一个是有效的,而另一个是如此的相似呢?

但是,我认为db.search函数正常工作,因为console.log行运行良好,并根据查询显示在数据库中预期返回的条目。 我认为这个问题可能存在于HTML或Controller中? 如果任何人都可以借用任何好的build议! 这里是terminal的副本:

 server starting on http://localhost:6001 2 2 Document id: 4092be64a755bc04432a5187cdf70006 Document id: 4092be64a755bc04432a5187cdf6f9c2 { total_rows: 2, bookmark: 'g1AAAACqeJzLYWBgYMpgTmHQSUlKzi9KdUhJMtFLyilNzc2s0C3N1i0uScxLSSxKMdRLzskvTUnMK9HLSy3JAenKYwGSDAuA1P____dnZTC52R9eXAUSS2RANdGcJBMfQEz8DzbxWc1JsImMWQAEtDc6', rows: [ { id: '4092be64a755bc04432a5187cdf70006', order: [Object], fields: [Object] }, { id: '4092be64a755bc04432a5187cdf6f9c2', order: [Object], fields: [Object] } ] } 

尝试将include_docs添加到您的search查询中:

 {q:'TerritoryTypeName:NHS', include_docs:true} 

它看起来像你正在返回的数据不包括您试图访问您的HTML文档对象:

 <tr ng-repeat="doc in myData"> <td>{{doc.doc.TerritoryTypeName}}</td> <td>{{doc.doc.TeamOwnerSerialNo}}</td> ... </tr> 

它看起来像你期待从服务器返回的数据看起来像这样:

 rows : [ { doc : { TerritoryTypeName: "xxx", TeamOwnerSerialNo: "xxx", ... }, { doc : { TerritoryTypeName: "yyy", TeamOwnerSerialNo: "yyy", ... } ] 

但是,它是这样从服务器返回的:

 rows: [ { id: '4092be64a755bc04432a5187cdf70006', order: [Object], fields: [Object] }, { id: '4092be64a755bc04432a5187cdf6f9c2', order: [Object], fields: [Object] } ]