2016-11-13 99 views
1

上找不到模塊'html'錯誤」我正在構建一個webapp,使用ui-router爲AngularJS處理我通過$stateProvider的路由,以便只有各種狀態才能在ui-view中呈現。「在快速角度節點模板Render

我有一個server.js文件,希望呈現Web應用程序將基於的初始腳手架(top-nav,footer..etc。),並且我希望所有請求都使用此模板加載並填充每個單個頁面使用模板。

但是,我不斷收到ERROR: Cannot find module 'html'

我挖過​​了stackoverflow,也嘗試安裝EJS,以便我可以呈現我的index.html頁面,但它仍然無法正常工作。

什麼是最好的方式來提供一個靜態html模板,並有角度ui路由器做路由的其餘部分?


這裏有兩個文件:

server.js

var express = require('express'); 
var app = express(); 
var bodyParser = require('body-parser'); 
var routes = require('server/routes'); 

// Set Port 
var PORT = process.env.PORT || 3000; 

// Rendering configuration 
app.set('views', __dirname + '/views'); 
app.set('view engine', 'ejs'); 

app.use(bodyParser.json()); 

routes(app); 

app.get('/*', function(req,res) { 
    res.render('index.html'); 
}); 

app.listen(PORT, function() { 
    console.log('Server running on ' + PORT) 
}); 

config.js

import angular from 'angular'; 
import uiRouter from 'angular-ui-router'; 

// Factories 
import todoFactory from 'factories/todo-factory'; 

// Controllers 
import todosController from 'controllers/todosController'; 
import profileController from 'controllers/profileController'; 
import signupController from 'controllers/signupController'; 
import signinController from 'controllers/signinController'; 


const app = angular.module('airporter', [uiRouter, todoFactory.name]); 

app.config(($stateProvider, $urlRouterProvider, $locationProvider) => { 
    $urlRouterProvider.otherwise('/'); 

    $stateProvider 
     // Homepage 
     .state('home', { 
      url: '/', 
      templateUrl: 'views/index.html', 
     }) 

     // Sign Up 
     .state('signup', { 
      url: '/signup', 
      templateUrl: 'views/signup/signup.html', 
      controller: signupController 
     }) 

     // Sign In 
     .state('signin', { 
      url: '/signin', 
      templateUrl: 'views/signin/signin.html', 
      controller: signinController 
     }) 

     // 
     .state('profile', { 
      url: '/profile', 
      templateUrl: 'views/profile/profile.html', 
      controller: profileController, 
      resolve: { 
       // logincheck: checkLoggedin 
       // if the following dependencies are successfully resolved you can access profile 
      } 
     }) 
     .state('todos', { 
      url: '/todos', 
      templateUrl: 'views/todos/todos.html', 
      controller: todosController 
     }) 
     .state('about', { 
      url: '/about', 
      templateUrl: 'views/about/about.html' 
     }); 

    $locationProvider.html5Mode(true); 

}); 

export default app; 
+0

爲什麼在EJS上設置視圖引擎並使用HTML進行渲染?我的建議,切換到哈巴狗。很容易。我不是EJS的專家,但是你應該指向一個HTML頁面,但是像這樣:res.render('pages/index')這可能是你看到這個錯誤的原因。 – spa900

+1

對您有幫助嗎? http://stackoverflow.com/questions/16111386/node-js-cannot-find-module-html – ppovoski

+1

'app.get('/ *',function(req,res){ res.render('index.html '); });'從字面上告訴節點,對於***請求***,它應該呈現'index.html'。當***請求任何其他文件***時,將呈現'index.html'。這包括對腳本的請求,部分請求,甚至是對css文件的請求。其中之一可能是包含「html」模塊的文件。在設置節點配置時,你需要考慮你的靜態目錄,有很多問題和答案顯示如何完成。 – Claies

回答

0

爲了給大家一個參考,在MEANJS路線/*定義爲:

app.get('/*', function(req,res) { 
    res.render('index'); // without extension 
}); 

這就像在你的配置index.html是解釋爲模塊名稱。嘗試刪除文件擴展名爲'index'