Node.JS控制器未被调用

时间:2014-03-26 00:32:17

标签: node.js angularjs express mean-stack

我的MEAN堆栈应用程序中存在问题。我是node,angular,mongoDB,express,jade的新手......这可以解释我失败的原因......

我没有找到匹配所有requieremnt的单个教程,因此我从不同的教程构建此应用程序,但他们从不使用相同的方式来访问/组织数据。有时他们宣布服务,有时他们使用路由提供商...

以下是我设置应用程序的方法:

   app.js
   package.json
   routes.js

---config
       auth.js
       database.js
       passport.js

---node_modules
[...]
---public
   +---images
   +---javascripts
   |   |   CarListController.js
   |   |   
   |   \---vendor
   \---stylesheets
           style.css

---views
       index.jade
       layout.jade
       login.jade
       profile.jade

问题出在我的index.jade中。在这里,我想显示一个汽车列表(稍后在该列表上进行搜索)。

所以我创建了一个控制器(CarListController.js):

function CarListController($scope, $http) {
    console.log('Calling CarListController'));
    $http.get('/api/cars').success(function(data) {
          $scope.cars = data.cars;
        });
    });

在我的routes.js中,我在json中检索汽车列表:

module.exports = function(app, passport) {

app.get('/api/cars', function(req, res) {
// load the things we need
var mongoose = require('mongoose');

// define the schema for our user model
var carSchema = mongoose.Schema({
    marque        : String,
    modele        : String,
    desc          : String
 });

// create the model for users and expose it to our app
var Car = module.exports = mongoose.model('Car', carSchema);

    // use mongoose to get all cars in the database
        Car.find(function(err, car) {
    console.dir(car);
            // if there is an error retrieving, send the error. nothing after res.send(err) will execute
            if (err)
                res.send(err)

            res.json(car); // return all cars in JSON format
        });
    });
app.get('/', function(req, res) {       
    res.render('index.jade') // load the index.jade file
});

最后在我的index.jade中:

html(lang='fr', ng-app='LocatyvModule')
head
 meta(charset='utf-8')
 title My AngularJS App
 link(rel='stylesheet', href='/stylesheets/style.css')
 script(type='text/javascript', src='/javascripts/vendor/angular/angular.js')
 script(type='text/javascript', src='/javascripts/vendor/angular-bootstrap/ui-bootstrap-tpls.js')
 script(type='text/javascript', src='/javascripts/LocatyvModule.js')
 script(type='text/javascript', src='/javascripts/CarListController.js')
body
 div.container(ng-controller="CarListController")
  div
   div.row.car(ng-repeat="car in cars")
     p A CAR!

当我打电话给“localhost:8080 / api / cars”时 - >没关系,我的数据库中有3辆车。

当我调用我的index.jade时,我没有得到3行,而且我没有得到控制器中的跟踪。 我做错了什么?

此外,我认为我的项目组织不是很好(如果你有somme提示随意说)。

1 个答案:

答案 0 :(得分:2)

我认为问题是你没有角度模块和你的控制器注册。您可以在控制器JavaScript中尝试以下代码。

var app = angular.module('LocatyvModule', []);
app.controllers.controller('CarListController', function ($scope, $http) {
    console.log('Calling CarListController'));
    $http.get('/api/cars').success(function(data) {
          $scope.cars = data.cars;
        });
    });
);