2016-11-13 10 views
1

AngularJSのui-routerを使用して私のルーティングを処理する$stateProviderのwebappを構築し、さまざまな状態だけがui-viewに表示されるようにします。Express Angular Node Templateレンダリングでモジュール 'html'エラーが見つかりません

私はserver.jsファイルを持っており、ウェブアプリケーションが基づいている最初の足場(top-nav、footer..etc。)をレンダリングしたいと希望しています。テンプレートを使って個々のページ。

しかし、私は得続けるERROR: Cannot find module 'html'

私はstackoverflowを通して掘り出して、EJSをインストールしてindex.htmlページを表示できるようにしましたが、まだ動作しませんでした。

スタティックなHTMLテンプレートを提供し、角度ui-routerを使用して残りのルーティングを行う最良の方法は何でしょうか?ここで


は二つのファイルです:

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をレンダリングに使用しているのはなぜですか?私の助言は、pugに切り替える。はるかに簡単です。私は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ファイルのリクエストまでが含まれます。これらのうちの1つは '' html''モジュールを含むファイルでしょう。ノード構成を設定するときは、静的ディレクトリを考慮する必要があります。これがどのように行われているかを示す回答が複数あります。 – Claies

答えて

0

で、あなたの参照を与えるために、道を意味するお使いの設定でindex.htmlは、モジュール名として解釈しているみたいです

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

:は次のように定義されます。ファイルの拡張子を削除してください'index'

関連する問題