3

我已经阅读了这两个帖子,重新评估了我的问题:

    http://stackoverflow.com/questions/4529586/render-basic-html-view-in-node-js-express
http://stackoverflow.com/questions/12046421/how-to-configure-express-js-jade-to-process-html-files

我的代码如下:

app.engine('.html', require('jade').__express);
app.set('views', __dirname + '/app/views');
app.set('view engine', 'html');

很明显,由于某种原因,它试图读取索引,就好像它仍然是一个玉文件一样,因此我得到了错误。我相信我将其正确配置为服务器 .html 文件。这里有什么问题?我迷路了……

我试图重新排序这些行,但仍然是同样的错误。

但由于某种原因,我收到此错误:

Error: ....\views\index.html:4
    2| <html lang="en" ng-app="squashApp">
    3| <head>
  > 4|   <meta charset="utf-8">
    5|   <title>Squash Organizer</title>
    6|   <link rel="stylesheet" href="css/app.css"/>
    7|   <link rel="stylesheet" href="css/bootstrap.css"/>

unexpected token "indent"
    at Object.Parser.parseExpr (C:\Users\workspace\squash\node_modules\jade\lib\parser.js:241:15)
    at Object.Parser.parse (C:\Users\workspace\squash\node_modules\jade\lib\parser.js:133:25)
    at parse (C:\Users\workspace\squash\node_modules\jade\lib\jade.js:93:62)
    at Object.exports.compile (C:\Users\workspace\squash\node_modules\jade\lib\jade.js:156:9)
    at Object.exports.render (C:\Users\workspace\squash\node_modules\jade\lib\jade.js:210:15)
    at Object.exports.renderFile (C:\Users\workspace\squash\node_modules\jade\lib\jade.js:247:18)
    at View.exports.renderFile [as engine] (C:\Users\workspace\squash\node_modules\jade\lib\jade.js:232:21)
    at View.render (C:\Users\workspace\squash\node_modules\express\lib\view.js:76:8)
    at Function.app.render (C:\Users\workspace\squash\node_modules\express\lib\application.js:505:10)
    at ServerResponse.res.render (C:\Users\workspace\squash\node_modules\express\lib\response.js:756:7)

谢谢。

4

2 回答 2

4

有了这条线:

app.engine('.html', require('jade').__express);

你告诉 express 渲染模板以.htmlusing jam 结尾。

有了这个:

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

您告诉 express 它应该将没有扩展名的模板名称解释为以html.

所以我的猜测是你正在尝试 render 'index', express 将其解释为index.html然后按照指示传递给 jam 。

最好将玉映射到它自己的扩展(.jade是一个明显的候选者)。index.html并使用它的全名呈现你。

  1. consolidate.js添加到您的项目中:

    var engines = require('consolidate');
    
  2. 告诉玉渲染以 . 结尾的东西.jade

    app.engine('jade', require('jade').__express);
    
  3. 为以 结尾的内容注册简单的 html 渲染器.html

    app.engine('html', function(str, options) {
       return function(locals) {
           return str;
       };
    });
    
  4. 告诉 express 将没有扩展名的模板渲染为翡翠:

    app.set('view engine', 'jade');
    
  5. 使用它来呈现您的索引:

    res.render('index.html');
    

    和这个:

    res.render('view-name-without-extension'); 
    

    渲染玉模板。

于 2013-08-13T13:43:13.387 回答
1

默认情况下,快递采用 Jade 模板引擎。你的 app.js 应该是这样的。

/**
 * Module dependencies.
 */

var express = require('express')
  , routes = require('./routes')
  , user = require('./routes/user')
  , http = require('http')
  , path = require('path');

var app = express();

// all environments
app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'jade'); // <<<---- CHANGES FROM EJS TO JADE !!!
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));

// development only
if ('development' == app.get('env')) {
  app.use(express.errorHandler());
}

app.get('/', routes.index);
app.get('/users', user.list);

http.createServer(app).listen(app.get('port'), function(){
  console.log('Express server listening on port ' + app.get('port'));
});
于 2013-08-13T13:45:53.590 回答