不使用 Jade 的 Node.js + Express

Posted

技术标签:

【中文标题】不使用 Jade 的 Node.js + Express【英文标题】:Node.js + Express without using Jade 【发布时间】:2011-11-23 03:32:47 【问题描述】:

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

【问题讨论】:

Express 中的模板引擎是可选的。你可以为你已经创建的页面创建一个静态文件服务器。 Using html in Express instead of Jade的可能重复 【参考方案1】:

是的,

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

应该可以工作

【讨论】:

我尝试使用这种方法,但不断收到“找不到模块 'html'”错误。我尝试给出一个明确的路径以及将 html 文件放在与应用程序相同的目录中,但无济于事。有什么想法吗? 您需要从 Express 的 configure 块中删除视图引擎选项。 对于Cannot find module 'html' 错误,请阅读 -> ***.com/q/4529586/104380 这不再有效。请参阅下面的 Robert Brisita 的回答。 @EranRehavi,文件需要公开,而不是视图。将 index.html 移动到根公用文件夹为我解决了这个问题。【参考方案2】:

您可以像这样使用 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

【讨论】:

【参考方案3】:

更新

有些人可能担心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'));

【讨论】:

sendfile 现在已弃用;建议使用 sendFile,它需要绝对路径或“root”选项集。但这是正确的答案,应该这样选择。 写 4 行来提供一个文件是 1 行提供所有文件的一个很好的选择,因为......?哦,它现在也被弃用了;)谁在这里对这样的答案投票? 这个答案***.com/a/20580051/489396 解释了为什么使用 sendFile 不是一个好主意,而一般问题还有其他更好的答案。 @GusCrawford 您确实意识到您正在记下一个将近三年前并且在那个时间点有效的答案? 我愿意——我还否决了最受欢迎的答案,这也不再相关了。【参考方案4】:

对于需要在新的 express 项目中立即使用常规 HTML 而不使用 Jade 的任何人,您都可以这样做。

index.html 添加到视图文件夹。

app.js

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

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

更新

改用这个。有关说明,请参阅下面的评论部分。

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

【讨论】:

只是为了更新这个答案,sendfile 已被弃用,现在是 sendFile(注意大写 F),并且会这样写: res.sendFile(__dirname + "/views/index.html");它采用绝对路径或需要设置“root”选项。 不妨在 6 个月后出现的任何 Express 相关评论上添加一个脚本,并说 - 这种技术已被弃用。 **这现在不起作用。 **, express 在更改时返回错误。 这个答案***.com/a/20580051/489396 解释了为什么使用 sendFile 不是一个好主意,一般问题还有其他更好的答案。 @GusCrawford 答案是存在的并且已经帮助了其他人。欢迎提出修改建议。【参考方案5】:

在你的主文件中:

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

您的 index.jade 文件应该只包含:

include index.html

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

【讨论】:

有了这个,他仍然会使用 Jade。此外,此解决方案的迂回性质是不必要的 hack-y 并增加了重量。 仍然是一个有用的回应【参考方案6】:

这一切都过时了 - 3x 的正确答案,4x 是

这里的第二个答案: Render basic HTML view?

【讨论】:

... 这与下面 Emanuel Saringan 的答案完全相同,当前得分为 -2 你的答案已经过时了:p

以上是关于不使用 Jade 的 Node.js + Express的主要内容,如果未能解决你的问题,请参考以下文章

PHP 与 Node.js - 在 Node.js 中使用 Jade 的 HTML 渲染速度会变慢吗?

Node.js开发 ---- Jade 模板引擎使用

使用 SublimeWebStorm 开发 Jade

[js高手之路]Node.js模板引擎教程-jade速学与实战1

从 Express/node.js Web 应用程序预填充 HTML/Jade

您如何在 Node.js + Express + Mongoose + Jade 中处理表单验证,尤其是嵌套模型