2014-03-26 128 views
0

我的MEAN堆棧應用程序出現問題。我是節點,角度,mongoDB,express,jade中的新手......這可能可以解釋爲什麼我失敗了......未調用Node.JS控制器

我沒有找到與我的所有requiremnt匹配的單個教程,所以我從不同的教程構建此應用程序但他們從不以相同的方式訪問/組織數據。有時,他們申報服務,somtimes他們使用的路由提供商...

因此,這裏是我如何設置我的應用程序:

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。在這裏,我想顯示汽車列表(並稍後在列表中進行搜索)。

所以我創建了一個CONTROLER(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行,我沒有得到控制器中的痕跡。 我做錯了什麼?

另外我覺得我的項目組織不是很好(如果你有索姆提示可以隨意說)。

+0

您確定結果是'$ scope.cars = data.cars;'不是'$ scope.cars = data;'。你項目佈局很好。 – wayne

+0

不工作,但問題是我沒有看到我放入控制器的跟蹤日誌,所以甚至沒有被調用。 – Tyvain

+0

我需要在哪裏聲明我的控制器?有時我看到教程中有服務,是否有必要? – Tyvain

回答

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; 
     }); 
    }); 
); 
+0

現在正在工作。我想我也會把我的項目重新組織成更多的MVC,並去掉玉石。 TX – Tyvain