使用小胡子模板在Express中提供静态文件

时间:2016-06-18 20:59:54

标签: javascript node.js express mustache middleware

我试图从Express提供静态胡须文件的文件夹,但似乎无法弄清楚如何让它工作。假设我只有一个数据对象,如

{
  a: 'Hello :)'
  b: 'Goodbye :('
}

还有两个文件,

public/a.html

<div>{{a}}</div>

public/b.html

<div>{{b}}</div>

我怎样才能快速设置它为任意数量的静态html文件服务的位置,并用我的一个大对象替换模板化的部分?谢谢!

4 个答案:

答案 0 :(得分:12)

静态文件在发送给用户之前,如果不以任何方式处理,通常只会被称为 static

您尝试实现的是典型的模板系统。您只需按照plugin

中的说明操作即可
var mustacheExpress = require('mustache-express');

// Register '.html' extension with The Mustache Express
app.engine('html', mustacheExpress());

app.set('view engine', 'mustache');
app.set('views', __dirname + '/views'); // you can change '/views' to '/public',
    // but I recommend moving your templates to a directory
    // with no outside access for security reasons

app.get('/', function (req, res) {
    res.render('a');
});

另外考虑使用Handlebars,它通常比Mustache更方便使用。您可以在this question中找到差异列表。

答案 1 :(得分:3)

您可以mustachejs使用pug,就像mustache设置为view engine并定义其工作方式如下所示:

&#13;
&#13;
//required files
const fs = require("fs")
const mustache = require("mustache")

// To set functioning of mustachejs view engine
app.engine('html', function (filePath, options, callback) { 
    fs.readFile(filePath, function (err, content) {
        if(err)
            return callback(err)        
        var rendered = mustache.to_html(content.toString(),options);
        return callback(null, rendered)
    });
  });

// Setting mustachejs as view engine
app.set('views',path.join(__dirname,'views'));
app.set('view engine','html');

//rendering example for response
app.get('/',(req,res)=>{        
    res.render('index',{data:'Sample Data'});
});
&#13;
&#13;
&#13;

答案 2 :(得分:1)

我稍微修改了zlumer的答案,下面的代码对我来说很好用。

const express = require('express');
const app = express();
const mustacheExpress = require('mustache-express');

app.engine('html', mustacheExpress());

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

app.get('/', function(req, res) {
  const data = {
    hello: 'world',
    foo: 'bar'
  };

  res.render('test', data);
});

app.listen(3000, () => {
  console.log('Server running at http://localhost:3000/');
});

请检查https://github.com/HemingwayLee/sample-mustache-express  并随时克隆和修改它。

答案 3 :(得分:0)

您不应将html文件包含在公共目录中。公共目录应该只包含图像,javascript和css文件。

虽然有很多方法可以构建node / express应用程序,但是你可以找到一种使用Express Generator的好方法。

http://expressjs.com/en/starter/generator.html

如果您使用它,它将为您创建应用程序结构,清楚地说明您应该如何保留静态文件。