目前,为了提供静态文件我做这样的事情:
app.use('/', express.static(__dirname + '/public/'));
// then i start the server
http.createServer(app).listen(port, function() {
console.log('HTTP Express server listening on port %s', port);
});
但是,在所有条件下,这会为每个请求设置该路径的相同目录。我想做的是这样的事情会改变请求的响应请求:
http.createServer(app).listen(port, function() {
if (someCondition) {
app.use('/', express.static(__dirname + '/public/'));
}
else {
app.use('/', express.static(__dirname + '/public/someotherpath'));
}
console.log('HTTP Express server listening on port %s', port);
});
我该怎么做?
答案 0 :(得分:2)
你可以通过另一种方式修改网址以达到你想要的效果
app.use('/', function(req,res,next){
if(condition){
req.url = newURL // add something to lead to different directory
}
next();
});
app.use('/', express.static(__dirname + '/public/'));
// then i start the server
http.createServer(app).listen(port, function() {
console.log('HTTP Express server listening on port %s', port);
});
答案 1 :(得分:1)
express.static()的结果是一个中间件函数,因此您可以根据条件动态调用它。
app.get('/', (req, res, next) => {
if (condition) {
express.static(__dirname + '/public/')(req, res, next);
} else {
express.static(__dirname + '/public/someotherpath')(req, res, next);
}
});
答案 2 :(得分:0)
根据您的上一条评论:您仍然可以在路由器中执行此操作
app.get('/somepath', function(req, res){
if(req.someCondition){
res.sendFile('./path/to/appropriate/file.html');
} else {
res.sendFile('./path/to/different/file.html');
}
}
让express.static
为您的公共文件提供服务,例如js,css和images。使用.sendFile()
方法发送不同的html文件。如果您不想使用jade或ejs
答案 3 :(得分:0)
老问题...但这是一个快速解决方案...
如果您想保留express.static随附的所有功能,则可以猴子补丁req.url
(因为它只是中间件):
const path = require('path');
const express = require('express');
const app = express();
// Dynamic path, but only match asset at specific segment.
app.use('/website/:foo/:bar/:asset', (req, res, next) => {
req.url = req.params.asset;
express.static(__dirname + '/static')(req, res, next);
});
// Just the asset.
app.use('/website/*', (req, res, next) => {
req.url = path.basename(req.originalUrl);
express.static(__dirname + '/static')(req, res, next);
});
答案 4 :(得分:0)
我也遇到了同样的问题,现在我通过创建一个类似于下面代码的条件来解决它
app.use("/", (req, res, next) => {
//check a condition if its false then return
if(1 !== 1)return
//After returned all conditions
next()
}, express.static("public"))
此代码检查 1 是否不是 1,如果 1 是 1,则不会显示文件,然后它会显示所有公共文件:)