在Express.js中渲染之前定义静态文件

时间:2018-08-16 12:34:51

标签: node.js express

我想在渲染之前在我的express应用程序中定义静态css和js文件夹。我无法通过以下方式在我的app.js文件中创建它:

app.use(express.static(path.join(__dirname, 'public', subfolder)));

因为子文件夹的值取决于请求。还有其他方法可以在控制器中定义它吗?

1 个答案:

答案 0 :(得分:0)

这应该可以满足您的需求,在这种情况下,我们将Express的sendFile用于每个请求:

const express = require('express');
const path = require('path');
const app = express();

app.get('/:path/*', function(req, res) {
    // You could also use query string parameters for this, e.g. req.query.param1
    let filePath = path.join(req.params.path, req.params[0]);
    console.log('Getting ' + filePath);
    res.sendFile(filePath, {root: './'});
});

app.listen(8081);

例如,如果您拥有文件夹/ p​​ath1和/ path2(都包含test.html),则请求:

http://localhost:8081/path1/test.html

http://localhost:8081/path2/test.html

将带您到相关文件。您还可以使用查询参数而不是路径参数来确定要服务的目录。

在这种情况下,您可以像这样形成路径:

let filePath = path.join(req.query.myVariable, req.params[0]);

完整的服务器将是:

const express = require('express');
const path = require('path');
const app = express();

app.get('/*', function(req, res) {
    let filePath = path.join(req.query.path, req.params[0]);
    console.log('Getting ' + filePath);
    res.sendFile(filePath, {root: './'});
});

app.listen(8081);

相关的Urls将是:

http://localhost:8081/test.html?path=path1

http://localhost:8081/test.html?path=path2