如何使用Express和EJS提供静态和动态内容?

时间:2014-04-02 22:16:40

标签: node.js

我想使用node.js构建一个简单的应用程序,其功能类似于IIS /经典ASP,其中所有内容(html,png,js,css,ejs)都可以在一个目录中,而ejs文件使用javascript vs .VBScript。

我从API和其他示例中收集了以下内容,但是ejs文件作为二进制文件到达浏览器并保存....

我的node.js文件:

var express = require('express');
var app = express();
app.use(app.router);
app.use(express.static(__dirname + '/html')); 
app.engine('.ejs', require('ejs').__express);
app.set('views', __dirname + '/html');
app.set('view engine', 'ejs');
app.get('*.ejs', function(req, res) {
   res.render(__dirname + '/html' + req.url, function(err, result) {
      res.end(result);
   });
});
app.listen(8080);

我的test.ejs文件:

<!DOCTYPE html>
<html>
   <head><title>A test</title></head>
   <body>
     My Test Page
       <% if (1==1) { %>
          Working
       <%}%>
   </body>
</html>​

我缺少什么或在哪里可以找到一个有效的例子?

我想出了......上面添加的解决方案

3 个答案:

答案 0 :(得分:3)

express.js不会神奇地尝试渲染静态文件,你必须在某处明确地调用render

我相信这样的事情会起作用:

var express = require('express')
var app = express()
app.engine('.ejs', require('ejs').__express)
app.set('views', __dirname + '/html')
app.set('view engine', 'ejs')
app.use(app.router) // only in express 3, remove that in express 4
app.get('/test.html', function(req, res, next) {
    res.render('test.ejs')
})
app.use(express.static(__dirname + '/html'))
app.listen(8080)

答案 1 :(得分:0)

我认为没有必要在每个地方运行渲染,我使用此示例通过将express 2.3.7迁移到4来渲染我的静态内容并且可以正常工作:

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

app.use(express.static(__dirname + '/public'))

我的静态内容位于“公共”目录中。

答案 2 :(得分:0)

我只想补充一点,这些天快递已经支持EJS:

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