问题描述
我有一个这个结构的博客项目:
- 服务器 - 用Node / Express编写
- admin - AngularJS SPA
- 公众 - AngularJS SPA(暂时)
管理员和公共部分具有相同的域,但管理员部分使用不同的子域,这允许我在Express中像这样提供应用程序:
app.get('*', (req, res) => { var firstIndex = req.get('host').indexOf('.'); var subdomain = req.get('host').substr(0, firstIndex).toLowerCase(); if (subdomain === '') { // Public part res.sendFile(path.join(__dirname, '../public', 'index.html')); } else if (subdomain.indexOf('admin') !== -1) { // Admin part res.sendFile(path.join(__dirname, '../admin/js', 'index.html')); } else { // Static files res.sendFile(path.join(__dirname, '../', req.url)); } });
此解决方案工作正常。 它捕获所有请求并为每个子域提供正确的index.html。
问题 - >我想在VueJS中传递项目的公共部分,特别是使用Nuxt从服务器端渲染中受益。 我是Nuxt的新手,所以还不了解这个框架的每个细节。
我看到可以提供 ,但我不知道如何使其与我当前的解决方案兼容。
任何帮助,将不胜感激! 谢谢
1楼
建议在中间件结束时调用
nuxt.render
,因为它将处理Web应用程序的呈现,并且不会调用next()
-
首先,在“公共部分”中调用next()。
其次,在下面添加nuxt中间件。
app.get('*', (req, res, next) => {
var firstIndex = req.get('host').indexOf('.');
var subdomain = req.get('host').substr(0, firstIndex).toLowerCase();
if (subdomain === '') {
// Public part, call next() to use the nuxt middleware!
next();
} else if (subdomain.indexOf('admin') !== -1) {
// Admin part
res.sendFile(path.join(__dirname, '../admin/js', 'index.html'));
} else {
// Static files
res.sendFile(path.join(__dirname, '../', req.url));
}
});
// The nuxt middleware
app.use(nuxt.render);
另一个也有效的例子。
// If Public part, response Nuxt server render app.
app.use((req, res, next) => {
var subdomain = req.get('host').substr(0, firstIndex).toLowerCase();
if (subdomain === '') {
// Public part, call nuxt.render middleware
nuxt.render(req, res, next);
} else {
next();
}
});
// admin / static files
app.get('*', (req, res, next) => {
var firstIndex = req.get('host').indexOf('.');
var subdomain = req.get('host').substr(0, firstIndex).toLowerCase();
if (subdomain.indexOf('admin') !== -1) {
// Admin part
res.sendFile(path.join(__dirname, '../admin/js', 'index.html'));
} else {
// Static files
res.sendFile(path.join(__dirname, '../', req.url));
}
});
我希望它有所帮助!
2楼
我使用快速静态文件来做你想要的,如果你想阅读更多,你可以在
首先,在“app.js”文件中,您必须添加以下两行:
app.use('/public', express.static(__dirname +'../public'));
app.use('/admin', express.static(__dirname +'../admin/js'));
之后,您必须检查两个前端项目中的index.html,并确保每个项目都具有正确的基本href。 例如,
public / index.html应该具有:
<base href="/public/">
admin / index.html应该具有:
<base href="/admin/">
我希望这个对你有用!