@tordroid

Как совместить vue-server-renderer и vm2?

Привет, мне нужно сделать серверный рендеринг для vue.js, при этом нужно выполнять недоверенный код из компонентов .vue

Для того что бы обезопаситься я хочу вынести серверный рендеринг в sandbox vm2
Вот только ничего не выходит.

Пытаюсь сделать примерно следующее:
const fs = require('fs');
const express = require('express');
const { createBundleRenderer } = require('vue-server-renderer');
const {NodeVM} = require('vm2');

const app = express();

app.get('*', (req, res) => {
  let bundleRenderer = createBundleRenderer(
    require('./dist/vue-ssr-bundle.json'),
    {
      template: fs.readFileSync('./public/index.html', 'utf-8')
    }
  );

  const vm = new NodeVM({
    sandbox: {
      bundleRenderer,
      res,
      req
    },
    require: {
      external: true,
    }
  })
  vm.run(`
    bundleRenderer
      .renderToStream({url: req.path})
      .pipe(res);
  `, 'server.js')
});

app.listen(8090);

Но получаю ошибку:
[Vue warn]: Error in beforeCreate hook: "TypeError: 'defineProperty' on proxy: trap returned truish for adding property 'styles'  that is incompatible with the existing property in the proxy target"


Возможно кто нибудь сможет подсказать мне, как правильно сделать подобное?
А может есть какой то другой способ выполнения недоверенного кода на сервере?
  • Вопрос задан
  • 111 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы