如果你只需要服务一个文件(例如app-1.js
或app-2.js
),那么你不需要使用express.static
。你可以在一个普通的路由处理器中使用res.sendFile
来处理请求,像这样:
app.get('/get-app', function(req, res) {
if (userIsLoggedIn()) {
res.sendFile('/path-to-logged-in-app.js')
} else {
res.sendFile('/path-to-logged-out-app.js')
}
})
更多关于res.sendFile
的内容请点击这里。
如果您想通过express.static
提供多个文件,您需要使用两个express.static
中间件实例,并在其上添加另一个中间件以根据用户的登录状态修改请求URL。也许可以按以下方式进行:
function checkUser(req, res, next) {
if (userIsLoggedIn()) {
req.url = `/app-1/${req.url}`
} else {
req.url = `/app-2/${req.url}`
}
next()
}
app.use(checkUser)
app.use('/app-1', express.static(path.join(__dirname, 'app-1')))
app.use('/app-2', express.static(path.join(__dirname, 'app-2')))
关于编写自己的中间件,可以在这里了解更多。您还可以在checkUser
中添加一些逻辑,仅为请求静态文件的URL(例如请求URL /assets/foo.js
)添加前缀,而不是添加到请求/api/some-api-function
这样的URL。
话虽如此,我对Angular不太熟悉,但建议探索其他提供登录/注销内容的方法。我假设Angular中有某些组件或“视图”概念,仅渲染“LoggedIn”或“LoggedOut”组件/视图可能更加清晰,而无需发送整个不同的“应用程序”。
'/login
端点来访问。 - CodyBugstein