我有一个Express静态中间件来服务特定文件夹下的文件,我想在这个中间件之前运行一个函数。
我厌倦了这样的东西:
app.use('/projects', ProjectsRoute.addView, express.static(path.join(__dirname, '/resources/projects')))
字符串
自定义中间件
const addView = async (req, res, next) => {
if (req.originalUrl.split('/')[3] === 'index.htm') {
try {
const folder = req.originalUrl.split('/')[2]
const project = await models.projects.findOne({ where: { folder } })
if (project) {
await models.projects.increment({ views: 1 }, { where: { id: project.id } })
} else {
next('Project not found')
}
} catch (err) {
console.log(`Error: ${err}`);
next(err)
}
}
next()
}
型
在本地环境中,它工作得很好,函数“addView”在服务文件之前运行,但一旦它在生产环境中,它的工作方式就不同了。
我在文档中读到,文件将首先被提供,只有在找不到文件时才运行我的中间件。
serve-static的文档
这就是生产中正在发生的事情。中间件仅在没有找到作为某种回退的文件时才被调用。
我只想在提供文件夹项目中的文件时运行这个自定义中间件,所以我不想为所有路由创建中间件。
1条答案
按热度按时间w8f9ii691#
我已设法找到解决此问题的方法。
而不是声明与express静态中间件连接的自定义中间件:
字符串
我把两个分开,就像这样:
型
这看起来工作正常,因为两个都会被调用,但这就是重点。