当前位置: 代码迷 >> JavaScript >> ExpressJS - 提供通用Nuxt应用程序和AngularJS SPA
  详细解决方案

ExpressJS - 提供通用Nuxt应用程序和AngularJS SPA

热度:33   发布时间:2023-06-07 11:50:15.0

我有一个这个结构的博客项目:

  • 服务器 - 用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的新手,所以还不了解这个框架的每个细节。

我看到可以提供 ,但我不知道如何使其与我当前的解决方案兼容。

任何帮助,将不胜感激! 谢谢

建议在中间件结束时调用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));
  }
});

我希望它有所帮助!

我使用快速静态文件来做你想要的,如果你想阅读更多,你可以在

首先,在“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/">

我希望这个对你有用!

  相关解决方案