在AngularJS中使用数据库 – 我应该在哪里写DB连接代码?
我现在正在使用Node.js,AngularJS和MySQL或MongoDB构build一个Web应用程序。 但是,当我试图使用包含从数据库中提取的数据集的控制器使用AngularJS,我不知道我应该在哪里写代码…
我现在正在写下面的代码(search.ejs,不包括完整部分(如html
标签)):
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.8/angular.min.js"></script> <script src="/javascripts/searchController.js"></script> <div ng-app class="row" ng-controller="searchCtrl"> <input ng-model="query"> <ul class="search"> <li ng-repeat="i in list" | filter:query"> <a href="{{i.url}}">{{i.name}}</a> </li> </ul> </div>
我想从数据库中获取list
的数据并使用它。 所以这里是searchController.js
文件:
function searchCtrl($scope){ $scope.list = [ { 'name': 'Michael', 'url': 'mic' }, { 'name': 'Bob', 'url': 'bob' } ] }
但是,我想要做的不是手动写出$scope.list
variables中的数据,而是使用MySQL或MongoDB数据库中的数据。 (MySQL是我的首选语言,但是我认为MongoDB在这种情况下似乎更好。)那么我怎样才能连接到DB?
我也有一个名为search.js
文件,这是一个文件:
exports.index = function(req, res) { res.render("search", { }, function(err, res){ res.render("index", { content: res }); }); }
最后,我还希望听到您是否应该首先将数据库中的数据保存到任何文件中,然后通过打开和closures文件来使用它,或者在请求获取数据时,我应该直接连接到数据库,性能和安全问题(数据库中的数据每天都会更新,所以我必须运行一个脚本来自动重新创build服务文件)。
谢谢。
我相信最好的做法是有一个http路由,你可以从列表中。 假设这是一个文章列表,那么你:
- 在您的Web服务器中有一个path,您可以:
GET /articles
(您可以使用mongodb驱动程序collection
和find
function轻松实现它) - 在你的angular度控制器上:
(客户端代码)
function searchCtrl($scope, $http){ $http.get("/articles").success(function(articles, status, headers, config) { $scope.articles = articles } }
至于你的第二个问题,你可以从服务器呈现列表,但是如果你想更新列表,你将需要使用$http
无论如何。 此外,请注意,angular模板使用{{}}
,所以如果你不小心,你可能会覆盖它们,这就是为什么我认为这不是一个好的做法。 但是,如果你想从Web服务器注入一些configuration,那么你可以注入类似于这个的代码(作为脚本):
angular.module("myModule.configuration", []).constant('myConfiguration', {siteName:"http://www.my-site.com");
然后你可以注入'myConfiguration'到你所有的控制器(不要忘记把"myModule.configuration"
添加到依赖数组中)