147

我从种子中尝试了这个简单的更改并创建了相应的 .html 文件(例如 index.html)。

//app.set('view engine', 'jade');
app.set('view engine', 'html');

这个文件保持不变:

exports.index = function(req, res){
  res.render('index');
};

但是在跑步时我得到

500 错误:找不到模块“html”

我唯一的选择是使用“ejs”吗?我的意图是结合使用纯 HTML 和 AngularJS。

4

16 回答 16

104

另一个链接上的答案会起作用,但要提供 HTML,根本不需要使用视图引擎,除非你想设置时髦的路由。相反,只需使用静态中间件:

app.use(express.static(__dirname + '/public'));
于 2013-07-28T19:14:28.103 回答
39

要使渲染引擎接受 html 而不是jade,您可以按照以下步骤操作;

  1. consolidateswig安装到您的目录中。

     npm install consolidate
     npm install swig
    
  2. 将以下行添加到您的 app.js 文件中

    var cons = require('consolidate');
    
    // view engine setup
    app.engine('html', cons.swig)
    app.set('views', path.join(__dirname, 'views'));
    app.set('view engine', 'html');
    
  3. 在“views”文件夹中添加您的视图模板作为 .html。重新启动节点服务器并在浏览器中启动应用程序。

虽然这将毫无问题地呈现 html,但我建议您通过学习来使用 JADE。Jade 是一个了不起的模板引擎,学习这将帮助您实现更好的设计和可扩展性。

于 2016-02-14T20:10:37.667 回答
30

在您的 apps.js 中添加

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.engine('html', require('ejs').renderFile);
app.set('view engine', 'html');

现在您可以使用 ejs 视图引擎,同时将视图文件保留为 .html

来源: http: //www.makebetterthings.com/node-js/how-to-use-html-with-express-node-js/

您需要安装这两个软件包:

npm install ejs --save
npm install path --save

然后导入需要的包:

var path = require('path');


这样,您可以将视图保存为.html而不是.ejs
在使用支持 html 但不识别 ejs 的 IDE 时非常有用。

于 2016-06-25T05:34:15.210 回答
20

如果您想将 Angular 与简单的纯 html 文件一起使用,则不需要视图引擎。操作方法如下: 在您的route.js文件中:

router.get('/', (req, res) => {
   res.sendFile('index.html', {
     root: 'yourPathToIndexDirectory'
   });
});
于 2016-09-06T12:47:11.057 回答
18

试试这个为你的服务器配置

app.configure(function() {
    app.use(express.static(__dirname + '/public'));         // set the static files location
    app.use(express.logger('dev'));                         // log every request to the console
    app.use(express.bodyParser());                          // pull information from html in POST
    app.use(express.methodOverride());                      // simulate DELETE and PUT
    app.use(express.favicon(__dirname + '/public/img/favicon.ico'));
});

那么您对路由的回调函数将如下所示:

function(req, res) {
    res.sendfile('./public/index.html');
};
于 2014-03-05T22:50:27.597 回答
9

我建议使用https://www.npmjs.com/package/express-es6-template-engine - 极轻且速度极快的模板引擎。这个名字有点误导,因为它也可以在没有 expressjs 的情况下工作。

集成到您的应用程序中所需的基础知识express-es6-template-engine非常简单且易于实现:

const express = require('express'),
  es6Renderer = require('express-es6-template-engine'),
  app = express();
  
app.engine('html', es6Renderer);
app.set('views', 'views');
app.set('view engine', 'html');
 
app.get('/', function(req, res) {
  res.render('index', {locals: {title: 'Welcome!'}});
});
 
app.listen(3000);
以下是位于index.html“views”目录中的文件内容:

<!DOCTYPE html>
<html>
<body>
    <h1>${title}</h1>
</body>
</html>
于 2018-11-17T10:28:58.923 回答
5

注释掉 html 的中间件,即

//app.set('view engine', 'html');

而是使用:

app.get("/",(req,res)=>{
    res.sendFile("index.html");
});
于 2019-08-02T10:42:47.087 回答
4

答案很简单。您必须使用 app.engine('html') 来呈现 *.html 页面。试试这个。它必须解决问题。

app.set('views', path.join(__dirname, 'views'));
**// Set EJS View Engine**
app.set('view engine','ejs');
**// Set HTML engine**
app.engine('html', require('ejs').renderFile);

.html 文件将起作用

于 2017-07-06T09:33:59.997 回答
4

不需要渲染 Html 文件。
渲染引擎所做的是将不是 Html 文件的文件转换为 Html 文件。
要发送 Html 文件,只需执行以下操作:

res.sendFile("index.html");

您可能需要使用__dirname+"/index.html"这样 express 才能知道确切的路径。

于 2020-07-10T13:48:29.070 回答
3

安装 ejs 模板

npm install ejs --save

在 app.js 中引用 ejs

app.set('views', path.join(__dirname, 'views'));`
app.set('view engine', 'ejs');

在视图/indes.ejs 等视图中创建 ejs 模板并在路由器中使用 ejs 模板

router.get('/', function(req, res, next) {
    res.render('index', { title: 'Express' });
});
于 2019-10-08T23:36:38.620 回答
3

html 不是视图引擎,但 ejs 提供了在其中编写 html 代码的可能性

于 2019-05-14T14:11:40.457 回答
3

HTML 文件可以使用 ejs 引擎渲染:

app.set('view engine', 'ejs');

并确保“/views”下的文件以“.ejs”命名。

例如“index.ejs”。

于 2016-04-04T19:27:58.313 回答
1

试试这个简单的解决方案,它对我有用

app.get('/', function(req, res){
    res.render('index.html')
  });
于 2018-02-08T17:43:04.743 回答
1

要使渲染引擎接受 html 而不是jade,您可以按照以下步骤操作;

Install consolidate and swig to your directory.

 npm install consolidate
 npm install swig

add following lines to your app.js file

var cons = require('consolidate');

// view engine setup
app.engine('html', cons.swig)
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'html');

add your view templates as .html inside “views” folder. Restart you node server and start the app in the browser.

这应该工作

于 2017-04-29T01:37:32.403 回答
1

通过路由来服务器 html 页面,我已经这样做了。

var hbs = require('express-hbs');
app.engine('hbs', hbs.express4({
  partialsDir: __dirname + '/views/partials'
}));
app.set('views', __dirname + '/views');
app.set('view engine', 'hbs');

并将我的 .html 文件重命名为 .hbs 文件 - 车把支持纯 html

于 2016-01-13T07:41:08.580 回答
0

在 swig 的帮助下渲染 html 模板。

//require module swig    
    var swig = require('swig');

// view engine setup    
    app.set('views', path.join(__dirname, 'views'));
    app.engine('html', swig.renderFile);
    app.set('view engine', 'html');
于 2020-03-12T06:55:52.607 回答