【问题标题】:How to route HTML Node js Express js如何路由 HTML Node js Express js
【发布时间】:2016-12-25 12:38:26
【问题描述】:

我正在尝试路由多个 HTML 页面。它加载 index.html 文件,但是当我想加载 raw.html 时,它说

错误:无法在视图目录中查找视图“错误”

app.js

var routes = require('./routes/index');
var users = require('./routes/users');
var raw = require('./routes/raw');


var app = express();


// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

// uncomment after placing your favicon in /public
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', routes);
app.use('/users', users);
app.use('/raw', raw);

/routes/index.js

var express = require('express');
var router = express.Router();
var path = require('path');

router.get('/', function(req, res) {
  res.sendFile(path.join(__dirname + '/public/index.html'));

});
module.exports = router;

/routes/raw.js

var express = require('express');
var router = express.Router();
var path = require('path');

router.get('/raw', function(req, res) {
    res.sendFile(path.join(__dirname + '/public/raw.html'));

});
module.exports = router;

【问题讨论】:

  • 是否安装了 Jade
  • 是的,默认安装的。
  • 可能有帮助,试试这个 res.sendFile('raw.html');
  • 尝试通过 npm install jam 再次安装jade
  • 错误:无法在视图目录中查找视图“错误”

标签: javascript html node.js express


【解决方案1】:

您正在配置 express 以使用 pug(以前称为 jade)模板引擎。

template engine 使您可以在您的 应用。在运行时,模板引擎会替换 具有实际值的模板文件,并将模板转换为 发送给客户端的 HTML 文件。这种方法使设计更容易 HTML 页面。

您上面提到的错误是因为您在views 目录中没有名为error.pug 的模板文件。模板引擎捕捉到第一个错误,即:

错误:ENOENT:没有这样的文件或目录,

然后尝试渲染错误模板。

res.sendFile(path.join(__dirname + '/public/index.html'));

文件routes/index.js 中的上述行将尝试发送routes/public/index.html,但该文件不存在。

您可以使用请求处理程序中的正确路径来修复您的快速配置,即:

router.get('/', function(req, res) {
  res.sendFile(path.join(__dirname + '/../public/index.html'));
});

您还应该删除模板引擎配置,因为您似乎没有使用它。

【讨论】:

  • 谢谢。它显示 index.html,但仍然不显示 raw.html (/raw) 或任何其他 html 文件(/about 或 /calculation)。有什么想法吗?
  • 在您的路由器文件中将/raw 更改为/。路线现在是/raw/raw
【解决方案2】:

您在 cmets 中提到要使用 Angular,所以... 如果你想使用 Angular,你不需要视图引擎。

使用 Angular 时,您网站的“主要”部分位于 客户端,在 index.html 文件中(这不是 100% 正确的,只是一个示例)。 该部分(在用户浏览器中)具有向服务器发送 http 请求的 JS 代码(Angular) - $http

服务器部分基本上只是操作这些请求并将数据发送回客户端的 Angular,然后您可以在客户端对这些数据做任何您想做的事情。 您可以使用 Node、PHP 等来响应这些请求。 这类似于 AJAX 背后的想法,即只更改页面的一小部分而不重新加载整个页面。

另一方面,如果你使用视图引擎,当服务器收到请求时,例如:

app.get('/',.routes.views.home);

服务器渲染整个 html 页面并将其发送到客户端,就像它使用 PHP 一样。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-26
    • 2013-08-22
    • 1970-01-01
    • 2016-06-27
    • 1970-01-01
    • 1970-01-01
    • 2017-03-07
    • 1970-01-01
    相关资源
    最近更新 更多