首页 > 解决方案 > 使用 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块中,但无济于事。

标签: node.jsexpressfile-not-found

解决方案


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

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!`);
    }
});

推荐阅读