如何路由HTML节点js Express js

时间:2016-12-25 12:38:26

标签: javascript html node.js express

我正在尝试路由多个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;

2 个答案:

答案 0 :(得分:1)

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

  

template engine 可让您在自己的网站中使用静态模板文件   应用。在运行时,模板引擎替换a中的变量   具有实际值的模板文件,并将模板转换为   HTML文件发送到客户端。这种方法使设计更容易   一个HTML页面。

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

  

错误: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'));
});

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

答案 1 :(得分:0)

您在评论中提到要使用Angular,所以... 如果要使用Angular,则不需要视图引擎。

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

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

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

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

服务器呈现整个html页面并将其发送到客户端,因为它与PHP一起使用。