Nodejs和表达静态视图路由

时间:2017-07-19 07:15:17

标签: javascript node.js express

我的问题与this stackoverflow问题非常相似。

我的目录结构为:

 |-static
 |---css
 |---img
 |---js
 |-views
 |---login.ejs
 |---pure.html 
 |---dash
 |-----dashboard.ejs
 |-----alsopure.html

我的配置:

app.set('views', __dirname + '/views');
app.use(express.static(__dirname + '/static'));

我还将路线定义为:

app.get('/login', function(req,res){
    //some locals
    res.render('login.ejs', locals);
});

app.get('/dash', function(req,res){
    locals.date = new Date().toLocaleDateString();
    res.render('dash/dashboard.ejs', locals);
});

在views文件夹中,我保留了纯静态html和动态ejs文件。

现在,我如何从views目录中提供静态html?因为如果我要添加/ views文件夹作为静态,用户也可以看到我的ejs文件,如果他们点击了正确的URL。

由于有多个html文件,我不想为每个新页面添加新路由。

另外,有没有办法让我向我的视图引擎指出这是一个静态HTML,而且不需要“处理”这个页面?

谢谢!

1 个答案:

答案 0 :(得分:0)

因此,您可以使用nodejs fs,然后路由如下:

app.get(/.*/, function(req, res, next) {
  var path = __dirname + '/views/' + req.path + '.html';
  if(fs.existsSync(path)) {
    // Consolidate function to load html with path
  } 
  else {
    next();
  }
}

或者您可以将它用作中间件:

app.use(function(req, res, next) {
  var path = __dirname + '/views/' + req.path + '.html';
  if(fs.existsSync(path)) {
    // Consolidate function to load html with path
  } 
  else {
    next();
  }
}

但我认为它会成为你的程序的膨胀:)。因为对于每个响应,它都会搜索html文件。