代码之家  ›  专栏  ›  技术社区  ›  Nate

ExpressJS在请求函数中提供静态文件

  •  2
  • Nate  · 技术社区  · 8 年前

    我目前正在提供如下静态文件:

    app.use('/javascripts', express.static(join(__dirname + '/assets/javascripts')));
    

    它按预期工作。

    我想做的是根据会话使用用户会话来提供静态文件。我试过这个:

    app.use('/javascripts', (req: Request, res: Response, next) =>{
        if(req.session.auth){
            express.static(join(__dirname + '/auth/javascripts'))
        } else{
            express.static(join(__dirname + '/assets/javascripts'))
        }
    });
    

    但它不提供文件。有人能解释一下为什么它不起作用,以及我如何才能实现我的目标吗?

    1 回复  |  直到 8 年前
        1
  •  2
  •   Nate    8 年前

    中间件函数(的第二个参数 .use() )应处理请求和呼叫 next() ,因此此代码不执行任何操作。

    您需要的只是有一个动态路由(而不是中间件),根据 req.session.auth :

    app.get('/javascripts/*', function(req, res){
        if(req.session.auth){
            res.sendfile(req.params[0], {root: './auth/javascripts'});
        } else {
            res.sendfile(req.params[0], {root: './assets/javascripts'});
        } 
    });