Node.js + Express不使用Jade

44

是否可以在不使用任何模板引擎的情况下使用express?


2
Express 中的模板引擎是可选的。您可以仅为已经创建的页面创建静态文件服务器。 - ampersand
可能是重复的问题, 参考 在Express中使用HTML而不是Jade - Gus Crawford
6个回答

30

好的。

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

应该能够正常工作


13
我尝试使用这种方法,但一直报错“找不到模块'html'”。我尝试过提供明确的路径,也将html文件放在与应用程序相同的目录中,但都没有成功。有什么想法吗? - Eran Rehavi
1
你需要从Express的configure块中删除视图引擎选项。 - Golo Roden
4
若出现“Cannot find module 'html'”错误,请参考此链接 -> https://dev59.com/m2855IYBdhLWcg3wHwaH - vsync
1
这个已经不再起作用了。请参见下面的Robert Brisita的答案。 - kirk.burleson
@EranRehavi,文件需要在公共文件夹中,而不是视图文件夹。将index.html移动到根公共文件夹中解决了我的问题。 - Anish
@Anish - 这可能是因为 express.static() 只定义了 public 文件夹,尝试为 views 文件夹定义相同的内容,*.html 文件也会在 views 文件夹中有效。 - Abilash Arjunan

15

更新

一些人可能担心 sendFile 只提供客户端缓存。有许多方法可以实现服务器端缓存,与 OP 的问题保持一致,可以使用 send 发送纯文本:

res.send(cache.get(key));

以下是3年前的原始回答:

对于任何想寻找PavingWays以外的替代方案的人,也可以这么做:

app.get('/', function(req, res) {
  res.sendFile('path/to/index.html');
});

无需编写:

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

1
sendfile现已被弃用;推荐使用sendFile,并要求使用绝对路径或设置'root'选项。但这是正确的答案,应该选择它作为答案。 - kirk.burleson
我也投了反对票,因为最受欢迎的答案已经不再相关。 - Gus Crawford
@GusCrawford:只是一个想法,也许你应该放弃对旧答案进行负面评价,而是给新的相关答案点赞?这将节省发布者重新访问旧问题并询问为什么被负面评价的时间。这些帖子都有时间戳,技术用户会知道它可能不相关。 - Robert Brisita
@GusCrawford,欢迎您进行编辑和更新。我认为您的第一条评论已经足够了,无需进行负面评价。 - Robert Brisita
@RobertBrisita 我真的很想这样做/计划这样做/会删除我们的聪明话对话 :) / 会点赞 - Gus Crawford
显示剩余4条评论

7

如果你需要在新的express项目中立即使用不带jade的常规HTML,你可以这样做。

在视图文件夹中添加一个index.html

app.js中更改:

app.get('/', routes.index);

to

app.get('/', function(req, res) {
  res.sendfile("views/index.html");
});

更新

请改用此方法。详见下方评论区解释。

app.get('/', function(req, res) {
  res.sendFile(__dirname + "/views/index.html"); 
});

4
更新此答案,sendfile已被弃用,现在使用sendFile(注意大写的F),应该这样写:res.sendFile(__dirname + "/views/index.html"); 它需要绝对路径或需要设置“root”选项。 - kirk.burleson
最好在任何与Express相关的评论中放置一个脚本,该脚本在6个月后启动并显示“此技术已被弃用”。 - Hairgami_Master
1
现在这个不起作用了。当我改变它时,表达式返回一个错误。 - Akansh
这个回答https://dev59.com/NWgu5IYBdhLWcg3wMkfF#20580051解释了为什么使用sendFile不是一个好主意,而且一般的问题还有其他更好的答案。 - Gus Crawford
@GusCrawford,答案已经存在并且帮助了其他人。欢迎提出修改建议。 - JGallardo

3
你可以使用Express自动提供静态文件,像这样:
// define static files somewhere on top
app.use(express['static'](__dirname + '/your_subdir_with_html_files'));

实际上这应该是 express.static(...),但为了通过 JSLint 的以上版本,这个也可以工作 ;)

然后你启动服务器并监听例如 1337 端口:

// app listens on this port
app.listen(1337);

现在,Express会自动地为您提供位于/your_subdir_with_html_files目录下的静态文件服务,如下所示:

http://localhost:1337/index.html

http://localhost:1337/otherpage.html


2

这与Emanuel Saringan的下面的回答完全相同,其当前得分为-2。 - Rocco
你的回答已经过时啦 :p - Grokodile

1
在你的主文件中:

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

您的index.jade文件应该只包含以下内容:
include index.html

其中index.html是您制作的原始HTML文件。


1
通过这种方式,他仍将使用Jade。此解决方案的迂回性质是不必要的hack-y,并增加了负担。 - user636044
仍然是一个有用的回复 - user3821538

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接