使用 express 和 serve-index 时捕获 ENOENT

问题描述

我一直在学习 React 并致力于开发一个界面,让用户可以使用 serve-index 包和自定义样式查看服务器上的某些文件

代码的相关部分如下:

app.use('/files',serveIndex(__dirname + '/files',{
    stylesheet: "directory-style.css",icons: true
}));

app.get('/files/*',(req,res) => {
    res.sendFile(req.url.substr(7),{root: `${__dirname}/files`});
});

不幸的是,如果 URL 不是有效的文件名,用户将看到类似于以下内容错误消息:

Error: ENOENT: no such file or directory,stat 'C:\full\path\to\my\react\app\on\server'

这可能是一个安全问题。

有没有办法避免暴露这个完整路径,或者我应该使用 serve-index 的替代方法

我尝试将代码的各个部分包含在 try-catch 块中,但无济于事。

解决方法

更新:我能够在文件检索方法下使用以下代码解决此问题:

app.get('/files/*',(req,res) => {
    let path = req.url.substr(7);
    let fileRoot = `${__dirname}/files`;
    if (fs.existsSync(fileRoot + "/" + path)) {
        res.sendFile(path,{root: fileRoot});
    } else {
        res.send(`File or directory "${path}" not found!`);
    }
});