我现在正在使用Node.js,AngularJS以及MySQL或MongoDB构建一个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
变量中写出数据,而是使用MySQL或MongoDB数据库中的数据。 (并且MySQL是我的首选语言,但我认为MongoDB在这种情况下似乎更好。)那么如何连接到数据库?
我还有一个名为search.js
的文件,它是以下文件:
exports.index = function(req, res) {
res.render("search", {
}, function(err, res){
res.render("index", {
content: res
});
});
}
最后,我还想听听您是否应该首先将数据从数据库保存到任何文件并通过打开和关闭文件来使用它,或者我应该在请求获取数据时直接连接到数据库,性能和安全问题的条款,(数据库中的数据每天都会更新,所以我必须运行一个脚本来自动重新创建服务文件)。
感谢。
答案 0 :(得分:20)
我认为最佳做法是拥有一条可以从中获取列表的http路由。让我们假设它是一个文章列表,然后你:
GET /articles
(您可以使用mongodb驱动程序collection
&amp; find
功能轻松实现该路线)(客户代码)
function searchCtrl($scope, $http){
$http.get("/articles").success(function(articles, status, headers, config) {
$scope.articles = articles
}
}
关于第二个问题,您可以从服务器呈现列表,但如果要更新列表,则无论如何都需要使用$http
。此外,请注意角度模板使用{{}}
,因此如果您不小心,可以覆盖它们 - 这就是为什么我认为这不是一个好习惯。
但是,如果您想要从Web服务器注入一些配置,那么您可以注入类似于此的代码(作为脚本):
angular.module("myModule.configuration", []).constant('myConfiguration', {siteName:"http://www.my-site.com");
然后你可以向所有控制器注入'myConfiguration'(不要忘记将"myModule.configuration"
添加到依赖项数组中)