“在快速角度节点模板Render

问题描述:

上找不到模块'html'错误”我正在构建一个webapp,使用ui-router为AngularJS处理我通过$stateProvider的路由,以便只有各种状态才能在ui-view中呈现。“在快速角度节点模板Render

我有一个server.js文件,希望呈现Web应用程序将基于的初始脚手架(top-nav,footer..etc。),并且我希望所有请求都使用此模板加载并填充每个单个页面使用模板。

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

我挖过​​了*,也尝试安装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://*.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

为了给大家一个参考,在MEANJS路线/*定义为:

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

这就像在你的配置index.html是解释为模块名称。尝试删除文件扩展名为'index'