使用mongoose和angular uib-typeahead

时间:2017-05-13 00:25:14

标签: angularjs node.js mongodb mongoose

我正在尝试使用来自uib-bootstrap和angular的uib-typeahead。

当我在输入类型中输入“acrel”的东西时,我希望使用mongoose和路由器从我的mongo服务器接收相同的字符串到请求参数。

当我查看服务器端时,键入的字符串显示为对象:  {'0':'a','1':'c','2':'r','3':'e','4':'l'}。

我需要服务器端查询的字符串作为原始的“acrel”。

我该如何解决?

//服务器登录到“请求”

  baseUrl: '',
  originalUrl: '/cidades?0=a&1=c&2=r&3=e&4=l',
  _parsedUrl:
   Url {
     ....
     search: '?0=a&1=c&2=r&3=e&4=l',
     query: '0=a&1=c&2=r&3=e&4=l',
     pathname: '/cidades',
     path: '/cidades?0=a&1=c&2=r&3=e&4=l',
     href: '/cidades?0=a&1=c&2=r&3=e&4=l',
     _raw: '/cidades?0=a&1=c&2=r&3=e&4=l' },
  params: {},
  query: { '0': 'a', '1': 'c', '2': 'r', '3': 'e', '4': 'l' },
  res:
   ServerResponse {

//使用mongoose的服务器

 'use strict';
    const express = require('express');
    const router = express.Router();
    //const querystring = require('querystring');
    const Cidade = require('../models/cidade'); 
    const callback=function(err,data,res){
         if (err) return res.status(500).json(err);
         return res.status(200).send(data);
    }

    router.getCidade=function(req,res,next){
        console.log(req);
        const query=new RegExp(req.query,'i');
        Cidade.find({ cidades: query }, (err,data) => {
           callback(err,data,res)
        })
    }

module.exports=router;

//标记

<script type="text/ng-template" id="mycustomTemplate.html">
                                          <a>{{match.model.cidade}}-{{match.model.sigla}}</a>
</script>
<div class="col-sm-5 col-lg-4">
        <input name="cidade.nome" id="nome" type="text" ng-model="clinica.cidade" placeholder="Digite o nome da cidade" autocomplete="off"
         uib-typeahead="cidade as cidade for cidade in getCidades($viewValue)" typeahead-loading="loadingLocations" typeahead-no-results="noResults"
class="form-control" typeahead-template-url="mycustomTemplate.html">
</div>

// angular code:

angular.module("clinang").controller('configClinicaClinicaAddClinicaCtrl',['$scope','dataService', '$state', function($scope,dataService, $state) {
      $scope.clinica={};
      $scope.getCidades = function(val) {
        return dataService.getCidade(val).then(function(response){
          return response.data;
        });
      };
}]);

//service
angular.module("clinang").service('dataService', ['$http','config', function ($http,config) {

        var urlBase = config.baseUrl;

        this.getCidade = function (where) {
            return $http.get(urlBase+'/cidades', {params:where});
        };

}

1 个答案:

答案 0 :(得分:1)

params期望一个将查询字符串名称映射到值的对象。你可能在服务中想要这样的东西:

this.getCidade = function (where) {
    return $http.get(urlBase+'/cidades', { params: { cidades: where } });
};