我想在渲染之前在我的express应用程序中定义静态css和js文件夹。我无法通过以下方式在我的app.js文件中创建它:
app.use(express.static(path.join(__dirname, 'public', subfolder)));
因为子文件夹的值取决于请求。还有其他方法可以在控制器中定义它吗?
答案 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);
例如,如果您拥有文件夹/ path1和/ 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