Node.js应用程序中的Angular.js特性

我有一个已经开发了几个星期的node.js应用程序。 我想添加像无限滚动的某些function,在node.js中的包也需要angular.js。 所以,我想我会继续添加angular.js支持,以便通过angular.js页面可以提供一个页面(以及其他需要这种支持的页面)。

通过互联网上可用的基本示例,我在/ views目录中创build了一个listAll.jade文件(如我使用express-jade)。 以下是它的样子:

html(ng-app='demoapp') head title List All Entries! link(href='//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css', rel='stylesheet') script(src='http://ajax.googleapis.com/ajax/libs/angularjs/1.3.10/angular.min.js') script(src='js/listAllEntries.js') body(ng-controller='GetAllEntries') div(ng-repeat='post in posts') | {{post}} 

然后在/ public / js目录里面,我添加了一个listAllEntries.js文件,下面是它的内容:

 var express = require('express'); var angular = require("angular"); var app = angular.module('geniuses', []); app.controller('GetAllGeniuses', [ '$scope', function($scope){ // $scope.test = 'Hello world!'; console.log("Here?...") $scope.posts = [ 'post 1', 'post 2', 'post 3', 'post 4', 'post 5' ]; }]); 

最后,将它们连接在一起,在index.js文件中(我已经将app.js重命名为index.js),我这样做了:

 app.use(express.static(__dirname + '/public')); app.use('/listAllEntries',function(req, res){ res.render('listAllEntries', {}); }); 

但是,当我点击http:// localhost:3001 / listAllEntries时 ,我在浏览器上得到的是{post}}。 在.js文件中添加的console.log语句不会被打印,所以我假设js文件没有被加载。

我已经看过几乎所有的选项和查询,但不能真正解决这个问题。

Angular目前不是一个同构框架(虽然Angular 2是有意的)。 所以,现在,你不能require('angular')并在服务器中呈现Angular模板。

相反,您可以通过常规脚本标记来提供包含(a)Angular框架和(b)Angular应用程序的html文件( *.jade )。 当这个html文件被加载到浏览器中时,浏览器运行你的Angular代码,你将看到console.log

要获取您的Angular应用程序的post,您将需要使用$http服务器来访问您的后端API(您的快速应用程序)。 API应该提供JSON,然后你的Angular应用程序将parsing出来并添加到它的模型( $scope.posts )中。