Express JS通过GET端点服务公共文件夹



我有一个名为my-folder的文件夹,里面还有许多其他文件夹。当我使用ExpressJS时,我试图为HTML和JS和CSS等资产提供服务。我正在尝试:

router.get('/serve/test', (req, res) => {
app.use(express.static(path.join(__dirname, 'my-folder/test/public')))
})

my-folder内部有各种文件夹,每个文件夹中都有不同的文件夹,我希望能够从my-folder中的任何文件夹中提供文件夹的public目录,以便在访问时链接到JS、HTML和CSS:http://example.com/serve/test

现在,我已经硬编码了test的文件夹,但这将通过参数。。。

有没有想过为什么这不起作用?

如果您事先知道父文件夹。您可以在router.get之外使用多个express.static。像这样:

app.use(express.static(path.join(__dirname, 'my-folder/test/public')))
app.use(express.static(path.join(__dirname, 'my-folder/test2/public')))
...
app.get(...)

如果你事先不知道文件夹名称,那么你需要将其构建为一个路由,并使用res.sendFile:返回文件

app.get('/my-folder/:uid/*', function(req, res){
var uid = req.params.uid, path = req.params[0] ? req.params[0] : 'index.html';
res.sendFile(path, {root: `./my-folder/${uid}/public/`});
});

上面的例子将提供所请求的路径文件或"文件";index.html";如果没有提供路径。

最新更新