在express.js应用程序中指定html文件路径最安全的方法是什么?

时间:2018-01-24 16:58:03

标签: javascript node.js express

我有一个index.js文件所在的目录结构:

path/to/home-page/src/routes

请注意,这也是__dirname。 html文件位于:

path/to/home-page/public/bootstrap/Homepage/page.html

我通过相对路径通过以下方式提供html文档:

const html_rel_dir : String = "../../public/bootstrap/Homepage/"
...

index.get('/homepage', (req, res, next) => { 

    var path_to_html = path.join(__dirname, html_rel_dir, 'homepage.html')
    res.sendFile( path_to_html );

});

这对我来说闻起来很糟糕,因为如果目录结构发生变化,代码会中断,有什么更好的方法来指定它?

附录,我的应用程序已配置为通过以下方式提供公共文件:

`this.app.use(express.static(path.join(__dirname, "public")));`

1 个答案:

答案 0 :(得分:1)

使用视图/模板引擎可以通过让您在顶层调出视图文件夹来抽象目录结构。我使用Nunjucks但与其他人的想法相同。把手,小胡子等。所以我的实际路线看起来像这样。

常规-pages.routes.js

router.get('/feedback', function (req, res) {
  var data = getSomeData()

  res.render('general/feedback.html',data)
})

早期在我的主应用程序中的框架被告知我的视图的位置所以从那时起它假定任何路径是我的主视图文件夹的子目录。您在上面看到的一个处理程序处理许多常规页面。然后它在我的主app.js或你称之为主文件的内容中引用如下:

app.use('/general',generalRoute)

因此,/ general的所有内容都转到之前定义的generalRoute处理程序general-pages.routes.js。用户的完整网址为/general/feedback

它如何知道如何查找我的观点?

nunjucks.configure('views', {
  autoescape: true,
  express   : app
});

上面的代码说开始在项目文件夹中查找名为“views”的文件夹。它足够聪明,可以使用内部节点环境变量来确定根目录。如果您选择任何其他模板引擎,他们会提供自己的选项来执行此操作。