在Express Angular Node模板渲染中出现"找不到模块'html'的错误"。

17 浏览
0 Comments

在Express Angular Node模板渲染中出现"找不到模块'html'的错误"。

我正在使用AngularJS的ui-router构建一个Web应用程序来处理我的路由,通过$stateProvider只渲染ui-view中的各个状态。

我有一个server.js文件,希望渲染一个初始的框架(顶部导航,页脚等),Web应用程序将以此为基础,并希望所有请求都加载这个模板,并使用模板填充每个单独的页面。

然而,我一直收到ERROR: Cannot find module 'html'的错误。

我已经在stackoverflow上仔细查找,并尝试安装EJS,以便渲染我的index.html页面,但仍然没有成功。

最好的方法是如何提供一个静态的HTML模板,并让Angular ui-router处理其余的路由呢?


以下是两个文件:

server.js

var express = require('express');
var app = express();
var bodyParser = require('body-parser');
var routes = require('server/routes');
// 设置端口
var PORT = process.env.PORT || 3000;
// 渲染配置
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';
// 工厂
import todoFactory from 'factories/todo-factory';
// 控制器
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
        // 主页
        .state('home', {
            url: '/',
            templateUrl: 'views/index.html',
        })
        // 注册
        .state('signup', {
            url: '/signup',
            templateUrl: 'views/signup/signup.html',
            controller: signupController
        })
        // 登录
        .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
                // 如果以下依赖项都成功解析,您可以访问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
0 Comments

在Express Angular Node模板渲染中出现"Cannot find module 'html' error"的问题是由于在配置中将index.html解释为模块名称导致的。解决方法是将文件扩展名去掉,将'index.html'修改为'index'。在MEANJS中,路由'/*'被定义为:

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

你可以尝试移除文件扩展名,将'index.html'修改为'index'。

0