2

我正在尝试一个简单的单页渲染,我显然做错了:

var express = require('express');
var app = express();

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

app.listen(3000);
console.log('Listening on port 3000');

错误:

Error: Cannot find module 'html'

我想加载一个带有 CSS/图像的页面,并想知道在哪里存储 CSS/图像/脚本/HTML 以及如何加载它。我还没有找到很多示例快递应用程序。

4

3 回答 3

4

使用 时res.render,您正在渲染已定义的视图。文档状态:

渲染一个带有回调的视图,该回调响应渲染的字符串。当发生错误时,next(err) 在内部被调用。

对于特定的 HTML,您要么必须使用 加载文件fs.readFile,要么让 Express 使用渲染引擎,例如 Jade 或 EJS。例如,此代码示例会将 EJS 渲染引擎应用于所有扩展名为.html.

app.engine('html', require('ejs').renderFile);

然后你可以像这样渲染一个文件。这是将变量传递给 HTML 文件的示例,因为这就是嵌入式 JavaScript 的用途。

app.get('/', function (req, res) {
  res.render('/file', {
    pass: 'arguments',
    to: 'the file here'
  });
});

这比必须在每次加载时读取文件更方便,如下所示:

app.get('/', function (req, res) {
  fs.readFile('/index.html', 'utf8', function (err, data) {
    res.send(data);
  });
});

尽管这与您的问题无关,但这就是将变量传递给 EJS 的工作原理。它甚至可以与if语句和一起使用loops,因为它接受所有 JavaScript。每次console.log呈现文件时,放入文件都会记录。

<span><%= pass %></span>
<!-- after rendering -->
<span>arguments</span>

如果您需要提供其他资源,例如 CSS、JavaScript 或其他 html 文件,您可以使用 Express 的目录功能。

app.use(express.static('/'));

然后你根本不需要渲染你的 HTML。它将被静态服务。

于 2013-05-21T19:57:50.520 回答
1

您将不使用任何模板的静态 HTML文件放在 express 项目公共文件夹中,并使用以下命令调用它:

app.get('/', function(req, res) {
  res.redirect('/home.html');
});
于 2013-10-27T17:35:33.750 回答
1

我想用 css/images 加载一个 html,并想知道存储 css/img/js 和 html 并加载它的布局是什么?我还没有找到许多示例 express js 应用程序。

假设你已经安装了 express,在你的 express 项目中你会发现public文件夹。在公用文件夹中,您会发现三个文件夹——imagesjavascriptsstylesheets。顾名思义,将您的 css/img/js 放在各自的文件夹中。

于 2013-10-27T17:31:48.557 回答